/*
* Copyright 2003-2010 Tufts University Licensed under the
* Educational Community License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may
* obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package tufts.vue.action;
import tufts.vue.*;
/*
The goal of this code is to save a map as an XML file conforming to the standard IMS RLI.
This is really a degenerate case. We will use:
<xml version "1.0" encoding="iso-8859-1">
<resourceList>
<resourceListMetadata>
<title>map name</title>
</resourceListMetadata>
<resource>
<resourceMetadata>
<title>resoure title></title>
<location>
<locator>resource spec</locator>
</location>
</resourceMetadata>
</resource>
</resourceList>
*/
public class IMSResourceList
{
public IMSResourceList()
{
}
public void convert(LWMap map,
java.io.File file)
{
try {
System.out.println("Saving IMS RLI...");
javax.xml.parsers.DocumentBuilderFactory dbf = null;
javax.xml.parsers.DocumentBuilder db = null;
org.w3c.dom.Document document = null;
org.w3c.dom.Element element = null;
dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
document = db.newDocument();
org.w3c.dom.Element resourceListElement = document.createElement("resourceList");
org.w3c.dom.Element resourceListMetadataElement = document.createElement("resourceListMetadata");
org.w3c.dom.Element titleElement = document.createElement("title");
titleElement.setNodeValue(VUE.getName());
resourceListMetadataElement.appendChild(titleElement);
resourceListElement.appendChild(resourceListMetadataElement);
//java.util.List descendents = map.getAllDescendents();
//System.out.println("size: " + descendents.size());
//for (int i=0; i < descendents.size(); i++) {
// LWComponent lwc = (LWComponent)descendents.get(i);
for (LWComponent lwc : map.getAllDescendents(tufts.vue.LWComponent.ChildKind.ANY)) {
if (!(lwc instanceof LWImage)) {
Resource r = lwc.getResource();
if (r != null) {
org.w3c.dom.Element resourceElement = document.createElement("resource");
org.w3c.dom.Element resourceMetadataElement = document.createElement("resourceMetadata");
org.w3c.dom.Element resourceTitleElement = document.createElement("title");
org.w3c.dom.Element locationElement = document.createElement("location");
resourceTitleElement.appendChild(document.createTextNode(r.getTitle()));
locationElement.appendChild(document.createTextNode(r.getSpec()));
//System.out.println("saving resource " + r.getTitle());
resourceMetadataElement.appendChild(resourceTitleElement);
resourceMetadataElement.appendChild(locationElement);
resourceElement.appendChild(resourceMetadataElement);
resourceListElement.appendChild(resourceElement);
}
}
}
document.appendChild(resourceListElement);
javax.xml.transform.TransformerFactory tf = javax.xml.transform.TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = tf.newTransformer();
transformer.setOutputProperty("indent","yes");
javax.xml.transform.dom.DOMSource domSource = new javax.xml.transform.dom.DOMSource(document);
String filename = file.getAbsolutePath();
javax.xml.transform.stream.StreamResult result =
new javax.xml.transform.stream.StreamResult (filename);
transformer.transform(domSource,result);
System.out.println("IMS RLI Save Complete");
} catch (Exception ex) {
System.out.println("IMS RLI writing failed: " + ex.getMessage());
}
}
}