blob: 638b376058622f43842507e968ed14d216371ddd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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.update.tests.model;
import java.io.*;
import java.net.URL;
import org.eclipse.update.core.SiteFeatureReferenceModel;
import org.eclipse.update.core.model.*;
import org.eclipse.update.tests.UpdateManagerTestCase;
public class SiteMain extends UpdateManagerTestCase {
public SiteMain(String name){
super(name);
}
public void testMain() throws Exception {
StringWriter strWriter=new StringWriter();
PrintWriter w = new PrintWriter(strWriter);
process("site_old_format.xml",w);
process("site.xml",w);
try {
process("site_with_type.xml",w);
fail("InvalidSiteTypeException not thrown");
} catch (InvalidSiteTypeException e) {
assertEquals(e.getNewType(),"some.other.site.type");
} finally {
System.out.println(strWriter);
w.close();
}
}
private static void process(String xml, PrintWriter w) throws Exception {
SiteModelFactory factory = new SiteModelFactory();
InputStream is = null;
SiteModel site = null;
w.println("");
w.println("Parsing site map ...");
try {
is = SiteMain.class.getResourceAsStream(xml);
site = factory.parseSite(is);
} finally {
if (is != null) {
try { is.close();} catch(IOException e) {}
}
}
if (site == null) return;
String base = "http://another.server/site.xml";
w.println("Resolving site using "+base+" ...");
site.resolve(new URL(base), null);
w.println("Writing site ...");
writeSite(w,0,site);
}
private static void writeSite(PrintWriter w, int level, SiteModel site) {
if (site == null) return;
String in = getIndent(level);
w.println(in+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
w.println(in+"<site");
w.println(in+" "+"type=\""+site.getType()+"\"");
w.println(in+" "+">");
writeDescription(w, level+1, site.getDescriptionModel());
writeFeatures(w, level+1, site);
writeArchives(w, level+1, site);
writeCategoryDefs(w, level+1, site);
w.println(in+"</feature>");
}
private static void writeDescription(PrintWriter w, int level, URLEntryModel ue) {
if (ue == null) return;
String in = getIndent(level);
w.println("");
w.println(in+"<description url=\""+ue.getURLString()+"\" -> "+ue.getURL()+">");
w.println(in+ue.getAnnotation());
w.println(in+"</description>");
}
private static void writeFeatures(PrintWriter w, int level, SiteModel site) {
String in = getIndent(level);
getIndent(level+1);
w.println("");
SiteFeatureReferenceModel[] features = site.getFeatureReferenceModels();
for (int i=0; i<features.length; i++) {
w.println(in+"<feature");
w.println(in+" "+"type=\""+features[i].getType()+"\"");
w.println(in+" "+"url=\""+features[i].getURLString()+"\" -> "+features[i].getURL());
w.println(in+" "+">");
writeCategories(w, level+1, features[i]);
w.println(in+"</feature>");
}
}
private static void writeArchives(PrintWriter w, int level, SiteModel site) {
String in = getIndent(level);
w.println("");
ArchiveReferenceModel[] archive = site.getArchiveReferenceModels();
for (int i=0; i<archive.length; i++) {
w.println(in+"<archive");
w.println(in+" "+"path=\""+archive[i].getPath()+"\"");
w.println(in+" "+"url=\""+archive[i].getURLString()+"\" -> "+archive[i].getURL());
w.println(in+" "+"/>");
}
}
private static void writeCategoryDefs(PrintWriter w, int level, SiteModel site) {
String in = getIndent(level);
getIndent(level+1);
w.println("");
CategoryModel[] cat = site.getCategoryModels();
for (int i=0; i<cat.length; i++) {
w.println(in+"<category-def");
w.println(in+" "+"name=\""+cat[i].getName()+"\"");
w.println(in+" "+"label=\""+cat[i].getLabel()+"\"");
w.println(in+" "+">");
writeDescription(w, level+1, cat[i].getDescriptionModel());
w.println(in+"</category-def>");
}
}
private static void writeCategories(PrintWriter w, int level, SiteFeatureReferenceModel feature) {
String in = getIndent(level);
String[] cat = feature.getCategoryNames();
for (int i=0; i<cat.length; i++) {
w.println(in+"<category name=\""+cat[i]+"\"");
}
}
private static String getIndent(int level) {
String indent = "";
for (int i=0; i<level; i++)
indent += " ";
return indent;
}
}