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 Moll/** 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * A custom Ant task that finds compile logs containing compile 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * errors. The compile logs with errors are sent as email attachments using 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * information in monitor.properties. 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.BufferedReader; 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.File; 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.FileNotFoundException; 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.FileReader; 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.IOException; 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Enumeration; 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Vector; 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport javax.xml.parsers.ParserConfigurationException; 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport javax.xml.parsers.SAXParser; 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport javax.xml.parsers.SAXParserFactory; 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.BuildException; 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.Task; 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.Attributes; 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.InputSource; 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.SAXException; 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.xml.sax.helpers.DefaultHandler; 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class CompileErrorCheck extends Task { 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final class CompilerErrorCheckerHandler extends DefaultHandler { 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean hasErrors = false; 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void startElement(String uri, String localName, 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String name, Attributes attributes) throws SAXException { 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.hasErrors) return; 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if ("problem_summary".equals(name)) { 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // problem_summary name 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String value = attributes.getValue("errors"); 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.hasErrors = value != null && !value.equals("0"); 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public boolean hasErrors() { 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.hasErrors; 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //directory containing of build source, parent of features and plugins 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String install = ""; 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //keep track of compile logs containing errors 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private Vector logsWithErrors; 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // keep track of the factory to use 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private SAXParser parser; 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public CompileErrorCheck() { 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.logsWithErrors = new Vector(); 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll SAXParserFactory factory = SAXParserFactory.newInstance(); 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.parser = null; 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.parser = factory.newSAXParser(); 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (ParserConfigurationException e) { 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (SAXException e) { 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void execute() throws BuildException { 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (parser == null) return; 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll findLogs(new File(install)); 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll sendNotice(); 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // test 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public static void main(String[] args) { 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll CompileErrorCheck checker = new CompileErrorCheck(); 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll checker.install="d:/compilelogs"; 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll checker.execute(); 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void findLogs(File aFile) { 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!aFile.exists()) return; 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // basis case 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (aFile.isFile()) { 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String absolutePath = aFile.getAbsolutePath(); 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (absolutePath.endsWith(".xml")) { 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parse(aFile); 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else if (absolutePath.endsWith(".jar.bin.log")||absolutePath.endsWith("dot.bin.log")){ 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll read(aFile); 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //recurse into directories looking for and reading compile logs 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll File files[] = aFile.listFiles(); 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (files != null) { 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0, max = files.length; i < max; i++) { 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll findLogs(files[i]); 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void read(File file) { 116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //read the contents of the log file, and return contents as a String 117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (file.length()==0) 118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BufferedReader in = null; 121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String aLine; 122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll in = new BufferedReader(new FileReader(file)); 125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (FileNotFoundException e) { 126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while ((aLine = in.readLine()) != null) { 131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int statusSummaryIndex=aLine.indexOf("problem ("); 132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (statusSummaryIndex==-1) 133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll statusSummaryIndex=aLine.indexOf("problems ("); 134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (statusSummaryIndex!=-1&&(aLine.indexOf("error", statusSummaryIndex) != -1)){ 136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll logsWithErrors.add(file); 137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(file.getName()+" has compile errors."); 138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (IOException e) { 142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } finally { 144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // make sure we don't leave any file handle open 145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (in != null) { 146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll in.close(); 148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (IOException e) { 149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // ignore 150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void parse(File file) { 156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BufferedReader reader = null; 157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll reader = new BufferedReader(new FileReader(file)); 159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (FileNotFoundException e) { 160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll InputSource inputSource = new InputSource(reader); 164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll CompilerErrorCheckerHandler compilerErrorCheckerHandler = new CompilerErrorCheckerHandler(); 166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll parser.parse(inputSource, compilerErrorCheckerHandler); 168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (SAXException e) { 169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (IOException e) { 171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } finally { 173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // make sure we don't leave any file handle open 174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (reader != null) { 175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll reader.close(); 177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (IOException e) { 178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // ignore 179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (compilerErrorCheckerHandler.hasErrors()) { 184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll logsWithErrors.add(new File(file.getParentFile(),file.getName().replaceAll(".xml", ".html"))); 185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(file.getName()+" has compile errors."); 186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void sendNotice() { 190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //send email notification that there are compile errors in the build 191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //send the logs as attachments 192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Enumeration enumeration = logsWithErrors.elements(); 193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (logsWithErrors.size() > 0) { 195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try{ 196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Mailer mailer = new Mailer(); 198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String [] logFiles = new String [logsWithErrors.size()]; 199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int i=0; 201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (enumeration.hasMoreElements()) { 203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll logFiles[i++]=((File) enumeration.nextElement()).getAbsolutePath(); 204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll mailer.sendMultiPartMessage("Compile errors in build", "Compile errors in build. See attached compile logs.", logFiles); 207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (NoClassDefFoundError e){ 208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll while (enumeration.hasMoreElements()) { 209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String path=((File) enumeration.nextElement()).getAbsolutePath(); 210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String nameWithPlugin=path.substring(path.indexOf("plugins"),path.length()); 211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println("Compile errors detected in "+nameWithPlugin); 212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println("Unable to send email notice of compile errors."); 215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println("The j2ee.jar may not be on the Ant classpath."); 216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Gets the install. 225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return Returns a String 226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public String getInstall() { 228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return install; 229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Sets the install. 233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param install The install to set 234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setInstall(String install) { 236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.install = install; 237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 240