You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/06/24 12:09:23 UTC
svn commit: r1139228 -
/incubator/clerezza/trunk/parent/rdf.web/rdf.web.core/src/main/java/org/apache/clerezza/rdf/web/core/Restorer.java
Author: reto
Date: Fri Jun 24 10:09:23 2011
New Revision: 1139228
URL: http://svn.apache.org/viewvc?rev=1139228&view=rev
Log:
CLEREZZA-576: added previously forgotten restorer
Added:
incubator/clerezza/trunk/parent/rdf.web/rdf.web.core/src/main/java/org/apache/clerezza/rdf/web/core/Restorer.java
Added: incubator/clerezza/trunk/parent/rdf.web/rdf.web.core/src/main/java/org/apache/clerezza/rdf/web/core/Restorer.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.web/rdf.web.core/src/main/java/org/apache/clerezza/rdf/web/core/Restorer.java?rev=1139228&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/rdf.web/rdf.web.core/src/main/java/org/apache/clerezza/rdf/web/core/Restorer.java (added)
+++ incubator/clerezza/trunk/parent/rdf.web/rdf.web.core/src/main/java/org/apache/clerezza/rdf/web/core/Restorer.java Fri Jun 24 10:09:23 2011
@@ -0,0 +1,123 @@
+/*
+ * 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.clerezza.rdf.web.core;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import org.apache.clerezza.rdf.core.Graph;
+import org.apache.clerezza.rdf.core.Literal;
+import org.apache.clerezza.rdf.core.LiteralFactory;
+import org.apache.clerezza.rdf.core.Triple;
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.TcProvider;
+import org.apache.clerezza.rdf.core.serializedform.Parser;
+import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
+import org.apache.clerezza.rdf.ontologies.RDF;
+import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.clerezza.rdf.web.ontologies.BACKUP;
+import org.apache.felix.scr.annotations.Reference;
+
+/**
+ * A utility to restore the triple collection
+ *
+ * @author reto
+ */
+public class Restorer {
+
+ @Reference
+ Parser parser;
+
+ /**
+ *
+ *
+ * @param backupData the bytes of a backup zip
+ * @param target
+ */
+ public void restore(InputStream backupData, TcProvider target) throws IOException {
+ ZipInputStream compressedTcs = new ZipInputStream(backupData);
+
+ Map<String, TripleCollection> extractedTc = new HashMap<String, TripleCollection>();
+ String folder = "";
+ ZipEntry entry;
+ Graph metaGraph = null;
+ while ((entry = compressedTcs.getNextEntry()) != null) {
+ String entryName = entry.getName();
+ if (entry.isDirectory()) {
+ folder = entryName;
+ } else {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ int count;
+ byte buffer[] = new byte[2048];
+ while ((count = compressedTcs.read(buffer, 0, 2048)) != -1) {
+ baos.write(buffer, 0, count);
+ }
+ ByteArrayInputStream serializedGraph = new ByteArrayInputStream(
+ baos.toByteArray());
+ if (entryName.equals("triplecollections.nt")) {
+ metaGraph = parser.parse(serializedGraph,
+ SupportedFormat.N_TRIPLE, null);
+ } else {
+ Graph deserializedGraph = parser.parse(serializedGraph,
+ SupportedFormat.N_TRIPLE, null);
+ extractedTc.put(entryName, deserializedGraph);
+ }
+ baos.flush();
+ baos.close();
+ }
+ }
+ if (metaGraph == null) {
+ throw new RuntimeException("No metadata graph found in backup.");
+ }
+ compressedTcs.close();
+ {
+ final Iterator<Triple> mGraphIterator = metaGraph.filter(null, RDF.type, BACKUP.MGraph);
+ while (mGraphIterator.hasNext()) {
+ GraphNode graphGN = new GraphNode(mGraphIterator.next().getSubject(), metaGraph);
+ String fileName = graphGN.getLiterals(BACKUP.file).next().getLexicalForm();
+ TripleCollection extracted = extractedTc.get(fileName);
+ target.deleteTripleCollection((UriRef)graphGN.getNode());
+ target.createMGraph((UriRef)graphGN.getNode()).addAll(extracted);
+ }
+ }
+ {
+ final Iterator<Triple> graphIterator = metaGraph.filter(null, RDF.type, BACKUP.Graph);
+ while (graphIterator.hasNext()) {
+ GraphNode graphGN = new GraphNode(graphIterator.next().getSubject(), metaGraph);
+ String fileName = graphGN.getLiterals(BACKUP.file).next().getLexicalForm();
+ TripleCollection extracted = extractedTc.get(fileName);
+ target.deleteTripleCollection((UriRef)graphGN.getNode());
+ target.createGraph((UriRef)graphGN.getNode(), extracted);
+ }
+ }
+ for (Map.Entry<String, TripleCollection> pathTcPair : extractedTc.entrySet()) {
+ Literal fileNameLit = LiteralFactory.getInstance().createTypedLiteral(
+ pathTcPair.getKey());
+ Iterator<Triple> graphResIterator = metaGraph.filter(null, BACKUP.file, fileNameLit);
+ }
+ }
+}