ServerClasspathBase.java revision 871b417a57cab3336793a845810383ceae4233cb
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved.
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * The contents of this file are subject to the terms
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * of the Common Development and Distribution License
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * (the License). You may not use this file except in
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * compliance with the License.
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * You can obtain a copy of the License at
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * https://opensso.dev.java.net/public/CDDLv1.0.html or
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * See the License for the specific language governing
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * permission and limitations under the License.
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * When distributing Covered Code, include this CDDL
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * Header Notice in each file and include the License file
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * If applicable, add the following below the CDDL Header,
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * with the fields enclosed by brackets [] replaced by
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * your own identifying information:
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * "Portions Copyrighted [year] [name of copyright owner]"
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * $Id: ServerClasspathBase.java,v 1.1 2009/01/21 18:43:56 kanduls Exp $
871b417a57cab3336793a845810383ceae4233cbMark de Reeper * Portions Copyrighted 2013 ForgeRock, Inc.
871b417a57cab3336793a845810383ceae4233cbMark de Reeperpackage com.sun.identity.agents.tools.jetty.v7;
871b417a57cab3336793a845810383ceae4233cbMark de Reeperimport com.sun.identity.install.tools.configurator.IStateAccess;
871b417a57cab3336793a845810383ceae4233cbMark de Reeperimport com.sun.identity.install.tools.util.ConfigUtil;
871b417a57cab3336793a845810383ceae4233cbMark de Reeperimport com.sun.identity.install.tools.util.Debug;
871b417a57cab3336793a845810383ceae4233cbMark de Reeperimport com.sun.identity.install.tools.util.FileUtils;
871b417a57cab3336793a845810383ceae4233cbMark de Reeperpublic class ServerClasspathBase implements IConstants, IConfigKeys {
871b417a57cab3336793a845810383ceae4233cbMark de Reeper protected boolean updateJettyStartupJarFile(IStateAccess stateAccess) {
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Update jar file");
871b417a57cab3336793a845810383ceae4233cbMark de Reeper boolean status = false;
871b417a57cab3336793a845810383ceae4233cbMark de Reeper ArrayList<String> agentClasspathsDirs = getAgentClasspathDirectories(stateAccess);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String homeDir = (String) stateAccess.get(STR_KEY_JETTY_HOME_DIR);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Home directory :" + homeDir);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String startJarPath = homeDir + STR_FORWARD_SLASH + JETTY_START_JAR;
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String newJarPath = homeDir + STR_FORWARD_SLASH + "start-temp.jar";
871b417a57cab3336793a845810383ceae4233cbMark de Reeper JarFile oldJarFile = new JarFile(startJarPath);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper oldJarInputStream = new JarInputStream(new FileInputStream(new File(startJarPath)));
871b417a57cab3336793a845810383ceae4233cbMark de Reeper JarEntry entry = oldJarInputStream.getNextJarEntry();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper fos = new JarOutputStream(new FileOutputStream(newJarPath), m);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper fos.putNextEntry(new JarEntry(entry.getName()));
871b417a57cab3336793a845810383ceae4233cbMark de Reeper if (entry.getName().indexOf(JETTY_CLASSPATH_CONF_FILE) > 0 ) {
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Iterator<String> itr = agentClasspathsDirs.iterator();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Adding path " + pathToAdd);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper fos.write(pathToAdd.getBytes(), 0, pathToAdd.getBytes().length);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Updating jar failed with exception: "
871b417a57cab3336793a845810383ceae4233cbMark de Reeper FileUtils.copyFile(newJarPath, startJarPath);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Error copying jar file: " + ex.getMessage());
871b417a57cab3336793a845810383ceae4233cbMark de Reeper private ArrayList<String> getAgentClasspathDirectories(IStateAccess stateAccess) {
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("UpdateJettyServerClasspath.getAgentClasspathDirectories(): Get Agent Classpath Directories");
871b417a57cab3336793a845810383ceae4233cbMark de Reeper ArrayList<String> pathDirs = new ArrayList<String>();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String instanceName = stateAccess.getInstanceName();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String agentLibPath = ConfigUtil.getLibPath();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String agentJarPath = agentLibPath + STR_FORWARD_SLASH + AGENT_JAR;
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String sdkJarPath = agentLibPath + STR_FORWARD_SLASH + OPENAM_CLIENT_SDK_JAR;
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String agentLocaleDir = ConfigUtil.getLocaleDirPath();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper protected boolean removeClasspath(IStateAccess stateAccess) {
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.removeClasspath(): Remove agent classpath from start.jar.");
871b417a57cab3336793a845810383ceae4233cbMark de Reeper boolean status = false;
871b417a57cab3336793a845810383ceae4233cbMark de Reeper ArrayList<String> agentClasspathsDirs = getAgentClasspathDirectories(stateAccess);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String homeDir = (String) stateAccess.get(STR_KEY_JETTY_HOME_DIR);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.removeClasspath(): Home directory :" + homeDir);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String startJarPath = homeDir + STR_FORWARD_SLASH + JETTY_START_JAR;
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String newJarPath = homeDir + STR_FORWARD_SLASH + "start-temp.jar";
871b417a57cab3336793a845810383ceae4233cbMark de Reeper String tempFile = TEMP_DIR + STR_FORWARD_SLASH + "start-conf.temp";
871b417a57cab3336793a845810383ceae4233cbMark de Reeper JarFile oldJarFile = new JarFile(startJarPath);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper oldJarInputStream = new JarInputStream(new FileInputStream(new File(startJarPath)));
871b417a57cab3336793a845810383ceae4233cbMark de Reeper JarEntry entry = oldJarInputStream.getNextJarEntry();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper fos = new JarOutputStream(new FileOutputStream(newJarPath), m);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper fos.putNextEntry(new JarEntry(entry.getName()));
871b417a57cab3336793a845810383ceae4233cbMark de Reeper if (entry.getName().indexOf(JETTY_CLASSPATH_CONF_FILE) > 0) {
871b417a57cab3336793a845810383ceae4233cbMark de Reeper tempConfFileOut = new FileOutputStream(new File(tempFile));
871b417a57cab3336793a845810383ceae4233cbMark de Reeper writeToStream(oldJarInputStream, tempConfFileOut);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Iterator<String> itr = agentClasspathsDirs.iterator();
871b417a57cab3336793a845810383ceae4233cbMark de Reeper lineNo = FileUtils.getFirstOccurence(tempFile, pathToDel, true, false, false);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper FileUtils.removeLinesByNum(tempFile, lineNo, 1);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper //Now write the file back to fos
871b417a57cab3336793a845810383ceae4233cbMark de Reeper tempConfFileIn = new FileInputStream(new File(tempFile));
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Updating jar failed with exception: "
871b417a57cab3336793a845810383ceae4233cbMark de Reeper FileUtils.copyFile(newJarPath, startJarPath);
871b417a57cab3336793a845810383ceae4233cbMark de Reeper Debug.log("ServerClasspathBase.updateJettyStartupJarFile(): Error copying jar file: " + ex.getMessage());
871b417a57cab3336793a845810383ceae4233cbMark de Reeper protected void writeToStream(InputStream in, OutputStream out) throws IOException {