/******************************************************************************* * Copyright (c) 2005, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.releng; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.tools.ant.Task; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class UnpackUpdateJars extends Task { /** * @param args */ //parent to plugins and features directory which contains update jars private String site; private String output; ArrayList unpackedPlugins=new ArrayList(); public static void main(String[] args) { // TODO Auto-generated method stub UnpackUpdateJars up=new UnpackUpdateJars(); up.site="C:\\updatejars\\eclipse"; up.output="C:\\updatejars\\newsite"; up.execute(); } public UnpackUpdateJars(){ super(); } //unpack features, then unpack plug-ins which are not set to unpack="false" public void execute(){ new File(output).mkdirs(); new File(output+"/features").mkdirs(); new File(output+"/plugins").mkdirs(); //extract features File featureDir=new File(site,"features"); if (!featureDir.exists()){ return; } File[] features = featureDir.listFiles(); for (int i = 0; i < features.length; i++) { File feature = features[i]; if (feature.getName().endsWith(".jar")) { String fileName = feature.getName(); String unpackedFeatureName = fileName.substring(0, fileName.length() - 4); File unPackedFeature=new File(output+"/features/"+ unpackedFeatureName); unzip(feature, unPackedFeature); getUnpackedPluginList(new File(unPackedFeature,"feature.xml")); } } //unpack plug-ins for (int i=0;i" + line); } catch (IOException ioe) { ioe.printStackTrace(); } } } public String getSite() { return site; } public void setSite(String site) { this.site = site; } private void getUnpackedPluginList(File featureXml) { Document aDocument=null; BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(featureXml)); } catch (FileNotFoundException e) { e.printStackTrace(); } InputSource inputSource = new InputSource(reader); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = null; try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } try { aDocument = builder.parse(inputSource); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Get feature attributes NodeList nodeList=aDocument.getElementsByTagName("plugin"); if (nodeList==null) return; for (int i = 0; i < nodeList.getLength(); i++) { Node pluginNode = nodeList.item(i); NamedNodeMap aNamedNodeMap = pluginNode.getAttributes(); Node idNode = aNamedNodeMap.getNamedItem("id"); Node versionNode = aNamedNodeMap.getNamedItem("version"); String pluginDirName = idNode.getNodeValue() + "_" + versionNode.getNodeValue(); Node unpackNode = aNamedNodeMap.getNamedItem("unpack"); if (unpackNode == null) { if (!unpackedPlugins.contains(pluginDirName)) { unpackedPlugins.add(pluginDirName); } continue; } if (unpackNode.getNodeValue().toString().trim().toLowerCase().equals("true")) { if (!unpackedPlugins.contains(pluginDirName)){ System.out.println(pluginDirName); unpackedPlugins.add(pluginDirName); } continue; } //copy file to new location File jardPlugin=new File(site,"plugins/"+pluginDirName+".jar"); if (jardPlugin.exists()) if (!jardPlugin.renameTo(new File(output,"plugins/"+pluginDirName+".jar"))) System.out.println("Failed to move "+jardPlugin.getAbsolutePath()+" to "+output+"plugins/"+pluginDirName+".jar"); } } public String getOutput() { return output; } public void setOutput(String output) { this.output = output; } }