/******************************************************************************* | |
* Copyright (c) 2000, 2004 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; | |
} | |
} | |