blob: d171ac1225f7d7e0ab68f0312a507d2b7277cfa8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache 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.apache.org/licenses/LICENSE-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 org.apache.oodt.commons.activity;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* Storage that saves activities as XML documents.
*
* @author Kelly
* @version $Revision: 1.1 $
*/
public abstract class XMLStorage implements Storage {
/**
* Creates a new {@link XMLStorage} instance.
*/
protected XMLStorage() {
factory = DocumentBuilderFactory.newInstance();
}
public void store(String id, List incidents) {
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("activity");
root.setAttribute("id", id);
doc.appendChild(root);
for (Iterator i = incidents.iterator(); i.hasNext();) {
Incident incident = (Incident) i.next();
Element e = doc.createElement(incident.getClass().getName());
e.setAttribute("time", String.valueOf(incident.getTime().getTime()));
e.appendChild(doc.createTextNode(incident.toString()));
root.appendChild(e);
}
saveDocument(doc);
} catch (ParserConfigurationException ex) {
throw new IllegalStateException("Unexpected ParserConfigurationException: " + ex.getMessage());
} catch (IOException ex) {
System.err.println("Unable to save activity " + id + " due to " + ex.getClass().getName() + ": "
+ ex.getMessage());
ex.printStackTrace();
}
}
/**
* Save a completed activity record.
*
* @param doc XML document containing the activity's incidents.
* @throws IOException if an error occurs.
*/
protected abstract void saveDocument(Document doc) throws IOException;
/** Factory for document builders which we use to create XML documents. */
protected DocumentBuilderFactory factory;
}