blob: f09e5431e03097807581ef65ac7e218f2ee3a4bc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2002 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.examples.buildzip;
import java.io.OutputStream;
import java.io.PrintWriter;
import org.eclipse.update.core.model.*;
/**
* Write standard feature manifest (feature.xml) from model.
* </p>
* @since 2.0
*/
public class DefaultModelWriter {
private FeatureModel feature;
/**
* @since 2.0
*/
public DefaultModelWriter(FeatureModel feature) {
this.feature = feature;
}
/**
* @since 2.0
*/
public void writeFeatureManifest(OutputStream os) {
PrintWriter w = new PrintWriter(os);
writeFeature(w,0,feature);
w.flush();
}
private void writeFeature(PrintWriter w, int level, FeatureModel feature) {
if (feature == null) return;
String in = getIndent(level);
w.println(in+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
w.println(in+"<feature");
if (feature.getFeatureIdentifier()!=null)
w.println(in+" "+"id=\""+feature.getFeatureIdentifier()+"\"");
if (feature.getFeatureVersion()!=null)
w.println(in+" "+"version=\""+feature.getFeatureVersion()+"\"");
if (feature.getLabelNonLocalized()!=null)
w.println(in+" "+"label=\""+feature.getLabelNonLocalized()+"\"");
if (feature.getProviderNonLocalized()!=null)
w.println(in+" "+"provider-name=\""+feature.getProviderNonLocalized()+"\"");
if (feature.getImageURLString()!=null)
w.println(in+" "+"image=\""+feature.getImageURLString()+"\"");
if (feature.getOS()!=null)
w.println(in+" "+"os=\""+feature.getOS()+"\"");
if (feature.getWS()!=null)
w.println(in+" "+"ws=\""+feature.getWS()+"\"");
if (feature.getNL()!=null)
w.println(in+" "+"nl=\""+feature.getNL()+"\"");
if (feature.getApplication()!=null)
w.println(in+" "+"application=\""+feature.getApplication()+"\"");
w.println(in+" "+">");
writeDescription(w, level+1, feature.getDescriptionModel());
writeCopyright(w, level+1, feature.getCopyrightModel());
writeLicense(w, level+1, feature.getLicenseModel());
writeURLs(w, level+1, feature);
writePrereqs(w, level+1, feature);
writePluginEntries(w, level+1, feature);
writeNonPluginEntries(w, level+1, feature);
w.println("");
w.println(in+"</feature>");
}
private void writeDescription(PrintWriter w, int level, URLEntryModel ue) {
writeDescriptionEntry(w,level, ue, "description");
}
private void writeCopyright(PrintWriter w, int level, URLEntryModel ue) {
writeDescriptionEntry(w,level, ue, "copyright");
}
private void writeLicense(PrintWriter w, int level, URLEntryModel ue) {
writeDescriptionEntry(w,level, ue, "license");
}
private void writeDescriptionEntry(PrintWriter w, int level, URLEntryModel ue, String tag) {
if (ue == null) return;
String url = ue.getURLString();
String txt = ue.getAnnotationNonLocalized();
if (url==null && txt==null) return;
String in = getIndent(level);
w.println("");
if (url==null)
w.println(in+"<"+tag+">");
else {
w.print(in+"<"+tag+" url=\""+ue.getURLString()+"\"");
if (txt==null)
w.println("/>");
else
w.println(">");
}
if (txt!=null) {
w.println(in + txt);
w.println(in+"</"+tag+">");
}
}
private void writeURLs(PrintWriter w, int level, FeatureModel feature) {
URLEntryModel update = feature.getUpdateSiteEntryModel();
URLEntryModel[] discovery = feature.getDiscoverySiteEntryModels();
if (update == null && (discovery == null || discovery.length==0)) return;
String in = getIndent(level);
String in2 = getIndent(level+1);
w.println("");
w.println(in+"<url>");
if (update != null) {
w.println(in2+"<update");
if (update.getURLString()!=null)
w.println(in2+" "+"url=\""+update.getURLString()+"\"");
if (update.getAnnotationNonLocalized()!=null)
w.println(in2+" "+"label=\""+update.getAnnotationNonLocalized()+"\"");
w.println(in2+" "+"/>");
}
for (int i=0; discovery!=null && i<discovery.length; i++) {
w.println(in2+"<discovery");
if (discovery[i].getURLString()!=null)
w.println(in2+" "+"url=\""+discovery[i].getURLString()+"\"");
if (discovery[i].getAnnotationNonLocalized()!=null)
w.println(in2+" "+"label=\""+discovery[i].getAnnotationNonLocalized()+"\"");
w.println(in2+" "+"/>");
}
w.println(in+"</url>");
}
private void writePrereqs(PrintWriter w, int level, FeatureModel feature) {
ImportModel[] imp = feature.getImportModels();
if (imp == null || imp.length == 0) return;
String in = getIndent(level);
String in2 = getIndent(level+1);
w.println("");
w.println(in+"<requires>");
for (int i=0; imp!=null && i<imp.length; i++) {
w.println(in2+"<import");
if (imp[i].getIdentifier()!=null)
w.println(in2+" "+"plugin=\""+imp[i].getIdentifier()+"\"");
if (imp[i].getVersion()!=null)
w.println(in2+" "+"version=\""+imp[i].getVersion()+"\"");
if (imp[i].getMatchingRuleName()!=null)
w.println(in2+" "+"match=\""+imp[i].getMatchingRuleName()+"\"");
w.println(in2+" "+"/>");
}
w.println(in+"</requires>");
}
private void writePluginEntries(PrintWriter w, int level, FeatureModel feature) {
PluginEntryModel[] plugin = feature.getPluginEntryModels();
if (plugin == null || plugin.length == 0) return;
String in = getIndent(level);
w.println("");
for (int i=0; i<plugin.length; i++) {
w.println(in+"<plugin");
if (plugin[i].getPluginIdentifier()!=null)
w.println(in+" "+"id=\""+plugin[i].getPluginIdentifier()+"\"");
if (plugin[i].getPluginVersion()!=null)
w.println(in+" "+"version=\""+plugin[i].getPluginVersion()+"\"");
if (plugin[i].isFragment())
w.println(in+" "+"fragment=\""+plugin[i].isFragment()+"\"");
if (plugin[i].getOS()!=null)
w.println(in+" "+"os=\""+plugin[i].getOS()+"\"");
if (plugin[i].getWS()!=null)
w.println(in+" "+"ws=\""+plugin[i].getWS()+"\"");
if (plugin[i].getNL()!=null)
w.println(in+" "+"nl=\""+plugin[i].getNL()+"\"");
if (plugin[i].getDownloadSize()!=ContentEntryModel.UNKNOWN_SIZE)
w.println(in+" "+"download-size=\""+plugin[i].getDownloadSize()+"\"");
if (plugin[i].getInstallSize()!=ContentEntryModel.UNKNOWN_SIZE)
w.println(in+" "+"install-size=\""+plugin[i].getInstallSize()+"\"");
w.println(in+" "+"/>");
}
}
private void writeNonPluginEntries(PrintWriter w, int level, FeatureModel feature) {
NonPluginEntryModel[] data = feature.getNonPluginEntryModels();
if (data == null || data.length == 0) return;
String in = getIndent(level);
w.println("");
for (int i=0; i<data.length; i++) {
w.println(in+"<data");
if (data[i].getIdentifier()!=null)
w.println(in+" "+"id=\""+data[i].getIdentifier()+"\"");
if (data[i].getOS()!=null)
w.println(in+" "+"os=\""+data[i].getOS()+"\"");
if (data[i].getWS()!=null)
w.println(in+" "+"ws=\""+data[i].getWS()+"\"");
if (data[i].getNL()!=null)
w.println(in+" "+"nl=\""+data[i].getNL()+"\"");
if (data[i].getDownloadSize()!=ContentEntryModel.UNKNOWN_SIZE)
w.println(in+" "+"download-size=\""+data[i].getDownloadSize()+"\"");
if (data[i].getInstallSize()!=ContentEntryModel.UNKNOWN_SIZE)
w.println(in+" "+"install-size=\""+data[i].getInstallSize()+"\"");
w.println(in+" "+"/>");
}
}
private String getIndent(int level) {
String indent = "";
for (int i=0; i<level; i++)
indent += " ";
return indent;
}
}