/*******************************************************************************
* Copyright (c) 2015 Mentor Graphics 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:
* Mentor Graphics - initial API and implementation
*******************************************************************************/
package com.codesourcery.internal.installer;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.eclipse.core.runtime.CoreException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import com.codesourcery.installer.Installer;
/**
* Stores information about a mirror.
*/
public class MirrorDescription {
/** Root element */
private static final String ELEMENT_ROOT = "mirrorInfo";
/** Product ID attribute */
private static final String ATTRIBUTE_PRODUCT_ID = "productId";
/** Product version attribute */
private static final String ATTRIBUTE_PRODUCT_VERSION = "productVersion";
/** Product ID */
private String productId;
/** Product version */
private String productVersion;
/**
* Constructs a mirror description.
*/
public MirrorDescription() {
}
/**
* Sets the product identifier.
*
* @param productId Product identifier
*/
public void setProductId(String productId) {
this.productId = productId;
}
/**
* @return Returns the product identifier
*/
public String getProductId() {
return productId;
}
/**
* Sets the product version.
*
* @param productVersion Product version
*/
public void setProductVersion(String productVersion) {
this.productVersion = productVersion;
}
/**
* @return Returns the product version.
*/
public String getProductVersion() {
return productVersion;
}
/**
* Loads the mirror description from a file.
*
* @param file Description file
* @throws CoreException on failure
*/
public void load(File file) throws CoreException {
try {
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = docBuilder.parse(file);
NodeList nodes = document.getElementsByTagName(ELEMENT_ROOT);
if (nodes.getLength() == 1) {
Element root = (Element)nodes.item(0);
setProductId(root.getAttribute(ATTRIBUTE_PRODUCT_ID));
setProductVersion(root.getAttribute(ATTRIBUTE_PRODUCT_VERSION));
}
}
catch (Exception e) {
Installer.fail(e);
}
}
/**
* Saves the mirror description to a file.
*
* @param file Description file
* @throws CoreException on failure
*/
public void save(File file) throws CoreException {
try {
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = docBuilder.newDocument();
Element root = document.createElement(ELEMENT_ROOT);
document.appendChild(root);
root.setAttribute(ATTRIBUTE_PRODUCT_ID, getProductId());
root.setAttribute(ATTRIBUTE_PRODUCT_VERSION, getProductVersion());
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(file);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(source, result);
}
catch (Exception e) {
Installer.fail(e);
}
}
}