1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/******************************************************************************* 2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Copyright (c) 2000, 2006 IBM Corporation and others. 3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * All rights reserved. This program and the accompanying materials 4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * are made available under the terms of the Eclipse Public License v1.0 5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * which accompanies this distribution, and is available at 6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * http://www.eclipse.org/legal/epl-v10.html 7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Contributors: 9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * IBM Corporation - initial API and implementation 10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *******************************************************************************/ 11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpackage org.eclipse.releng; 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.BuildException; 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.Task; 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.StringTokenizer; 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Vector; 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Enumeration; 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.*; 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Uses an ElementParser to read a list of feature.xml files and to determine 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * if all plugins defined in the features are present. 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class FetchValidator extends Task { 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //directory containing of build source, parent of features and plugins 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String install = ""; 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //Comma separated list of features to parse 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String list; 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //Elements to check for post fetch (use name of project in dev.eclipse.org) 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private Vector features; 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private Vector plugins; 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //keeps track of missing elements 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private Vector missingPlugins; 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private Vector missingFeatures; 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //parser 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ElementParser parser; 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //test 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public static void main(String args[]) { 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll FetchValidator validator = new FetchValidator(); 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll validator.install = "l:/vabase/team/sonia"; 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll validator.list = 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "org.eclipse.platform-feature,org.eclipse.platform.win32-feature,org.eclipse.platform.linux.motif-feature"; 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll validator.getListOfFeatures(validator.list); 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll validator.execute(); 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // entry point 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void execute() throws BuildException { 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll getListOfFeatures(list); 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!allPresent()) { 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String missingFeaturesDesc=""; 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String missingPluginsDesc=""; 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (missingFeatures.size() > 0) { 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0; i < missingFeatures.size(); i++) { 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingFeaturesDesc+="\n\r"+missingFeatures.get(i).toString(); 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (missingPlugins.size() > 0) { 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0; i < missingPlugins.size(); i++) { 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingPluginsDesc+="\n\t"+missingPlugins.get(i).toString(); 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll throw new BuildException("The following projects did not get fetched: \n"+missingFeaturesDesc+missingPluginsDesc+"\n" 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll +"\n\nPossible causes of missing source files include an incorrect Tag entry in a .map file or problems with CVS repositories."); 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println("Fetch Complete."); 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public FetchValidator() { 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parser = new ElementParser(); 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingPlugins = new Vector(); 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingFeatures = new Vector(); 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void getListOfFeatures(String list) { 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll StringTokenizer tokenizer = new StringTokenizer(list, ","); 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (tokenizer.hasMoreTokens()) { 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parser.parse( 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll install, 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll "feature", 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll (String) tokenizer.nextToken().trim()); 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll features = parser.getFeatures(); 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll plugins = parser.getPlugins(); 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private boolean allPresent() { 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // verify presence of all source projects for the build. 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // collect a list of missing plugins (or fragments), and features 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean allPresent = true; 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Enumeration enumeration = plugins.elements(); 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (enumeration.hasMoreElements()) { 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String plugin = (String) enumeration.nextElement(); 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (new File(install + "/plugins/" + plugin).exists()) 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll continue; 114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else { 115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingPlugins.add(plugin); 116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll allPresent = false; 117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll enumeration = features.elements(); 121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (enumeration.hasMoreElements()) { 123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String feature = (String) enumeration.nextElement(); 124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (new File(install + "/features/" + feature).exists()) 125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll continue; 126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else { 127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingFeatures.add(feature); 128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll allPresent = false; 129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return allPresent; 133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Gets the install. 137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Returns a String 138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public String getInstall() { 140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return install; 141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Gets the list. 145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Returns a String 146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public String getList() { 148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return list; 149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Sets the install. 153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param install The install to set 154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setInstall(String install) { 156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.install = install; 157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Sets the list. 161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param list The list to set 162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setList(String list) { 164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.list = list; 165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 168