diff src/main/java/org/mpi/openmind/repository/utils/OM4StreamWriter.java @ 1:615d27dce9b3

(none)
author jurzua
date Wed, 29 Oct 2014 13:28:45 +0000
parents
children 5786aa6caeb3
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/org/mpi/openmind/repository/utils/OM4StreamWriter.java	Wed Oct 29 13:28:45 2014 +0000
@@ -0,0 +1,203 @@
+package org.mpi.openmind.repository.utils;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javolution.xml.stream.XMLOutputFactory;
+import javolution.xml.stream.XMLStreamException;
+import javolution.xml.stream.XMLStreamWriter;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.mpi.openmind.repository.bo.Attribute;
+import org.mpi.openmind.repository.bo.Entity;
+import org.mpi.openmind.repository.bo.Node;
+import org.mpi.openmind.repository.bo.Relation;
+import org.mpi.openmind.repository.services.PersistenceService;
+import org.mpi.openmind.scheduling.utils.Scheduling;
+
+public class OM4StreamWriter {
+
+	private static Logger logger = Logger.getLogger(OM4StreamWriter.class);
+	
+	private static int itemsPerPage = 500;
+	
+	public static void backupEntities(String fileName, PersistenceService ps){
+		generateEntities(fileName, ps, Node.TYPE_ABOX);
+	}
+
+	public static void backupDefinitions(String fileName, PersistenceService ps){
+		generateEntities(fileName, ps, Node.TYPE_TBOX);
+	}
+	
+	private static void generateEntities(String fileName, PersistenceService ps, String type) {
+		OutputStreamWriter out;
+		try {
+			FileOutputStream fileOut = new FileOutputStream (fileName);
+			out = new OutputStreamWriter (fileOut, "UTF-8");
+			
+			XMLOutputFactory factory = XMLOutputFactory.newInstance();
+		    factory.setProperty(XMLOutputFactory.INDENTATION, "\t");
+
+			XMLStreamWriter xmlStreamWriter = factory.createXMLStreamWriter(out);
+			
+			int entitiesCount = 0;
+			
+			xmlStreamWriter.writeStartDocument("UTF-8", "1.0");
+			
+			if(type.equals(Node.TYPE_ABOX)){
+				xmlStreamWriter.writeStartElement(XMLUtil.OPENMIND_DATA);
+				entitiesCount = ps.getEntityCount(null).intValue();
+			}else{
+				xmlStreamWriter.writeStartElement(XMLUtil.META_DATA);
+				entitiesCount = ps.getEntityCount(Node.TYPE_TBOX).intValue();
+			}
+			
+			int numberOfPages = entitiesCount / itemsPerPage;
+			int counter = 0;
+			long start = System.currentTimeMillis();
+			DecimalFormat df = new DecimalFormat("#.##");
+			
+			List<Relation> relList = new ArrayList<Relation>();
+			
+			//(type.equals(Node.TYPE_TBOX)) ? "" : ""
+			
+			xmlStreamWriter.writeStartElement((type.equals(Node.TYPE_TBOX)) ? XMLUtil.DEFINITIONS : XMLUtil.ENTITIES);
+			for(int currentPage = 0; currentPage <= numberOfPages; currentPage++){
+				int startRecord = currentPage * itemsPerPage;
+				List<Entity> entities;
+				
+				if(type.equals(Node.TYPE_ABOX)){
+					entities = ps.getEntityPage(null, startRecord, itemsPerPage);
+				}else{
+					entities = ps.getEntityPage(Node.TYPE_TBOX, startRecord, itemsPerPage);
+				}
+				
+				for(Entity ent : entities){
+					insertEntity(ent, xmlStreamWriter, ps);
+					relList.addAll(ent.getSourceRelations());
+					counter++;
+					if ((counter % 50) == 0) {
+						System.out.print("*");
+					}
+				}
+				long diff = System.currentTimeMillis() - start;
+				double min = (double) diff / (double) (60 * 1000);
+				double percent = ((double) counter / (double) entitiesCount) * 100.0;
+				System.out.print("\n(" + df.format(percent) + "%) \t[" + counter + "/" + entitiesCount + "]\t");
+				logger.info("Speed[ents/min]: " + (double) counter / min);
+				xmlStreamWriter.flush();
+			}
+			xmlStreamWriter.writeEndElement();
+			
+			xmlStreamWriter.writeStartElement(XMLUtil.RELATIONS);
+			for(Relation rel : relList){
+				insertRelation(rel, xmlStreamWriter);
+			}
+			xmlStreamWriter.writeEndElement();
+			
+						
+			//end file.
+			xmlStreamWriter.writeEndElement();
+			
+			xmlStreamWriter.flush();
+			xmlStreamWriter.close();
+			
+			logger.info("END Stream Writer");
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (XMLStreamException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+	private static void insertRelation(Relation rel, XMLStreamWriter writer) throws XMLStreamException{
+		writer.writeStartElement(XMLUtil.RELATION);
+		
+		if(rel.getId() != null)
+    		writer.writeAttribute(XMLUtil.ID, rel.getId().toString());
+        if(StringUtils.isNotEmpty(rel.getOwnValue()))
+        	writer.writeAttribute(XMLUtil.OWN_VALUE, rel.getOwnValue());
+        if(StringUtils.isNotEmpty(rel.getObjectClass()))
+        	writer.writeAttribute(XMLUtil.OBJECT_CLASS, rel.getObjectClass());
+        if(StringUtils.isNotEmpty(rel.getContentType()))
+        	writer.writeAttribute(XMLUtil.CONTENT_TYPE, rel.getContentType());
+        if(rel.getSourceId() != null)
+        	writer.writeAttribute(XMLUtil.RELATION_SOURCE_ID, rel.getSourceId().toString());
+        if(rel.getTargetId() != null)
+        	writer.writeAttribute(XMLUtil.RELATION_TARGET_ID, rel.getTargetId().toString());
+        if(rel.getVersion() != null)
+        	writer.writeAttribute(XMLUtil.VERSION, rel.getVersion().toString());
+        if(rel.getModificationTime() != null)
+        	writer.writeAttribute(XMLUtil.MODIFICATION_TIME, rel.getModificationTime().toString());
+        
+		writer.writeEndElement();
+	}
+	
+	private static void insertEntity(Entity entity, XMLStreamWriter writer, PersistenceService ps) throws XMLStreamException{
+		
+		writer.writeStartElement((entity.getType().equals(Node.TYPE_TBOX)) ? XMLUtil.DEFINITION : XMLUtil.ENTITY);
+		
+		if(entity.isLightweight()){
+			entity = ps.getEntityContent(entity);
+		}
+
+		if(StringUtils.isNotEmpty(entity.getObjectClass()))
+        	writer.writeAttribute(XMLUtil.OBJECT_CLASS, entity.getObjectClass());
+        if(entity.getId() != null)
+    		writer.writeAttribute(XMLUtil.ID, entity.getId().toString());
+        if(StringUtils.isNotEmpty(entity.getOwnValue()))
+    		writer.writeAttribute(XMLUtil.OWN_VALUE, entity.getOwnValue());
+        if(StringUtils.isNotEmpty(entity.getContentType()))
+        	writer.writeAttribute(XMLUtil.CONTENT_TYPE, entity.getContentType());
+        if(entity.getVersion() != null)
+        	writer.writeAttribute(XMLUtil.VERSION, entity.getVersion().toString());
+        if(entity.getModificationTime() != null)
+        	writer.writeAttribute(XMLUtil.MODIFICATION_TIME, entity.getModificationTime().toString());
+
+		
+		if(entity.getAttributes().size() > 0){
+			writer.writeStartElement(XMLUtil.ATTRIBUTES);
+			for(Attribute att : entity.getAttributes()){
+				insertEntity(att, writer);
+			}	
+			writer.writeEndElement();
+		}
+		
+		writer.writeEndElement();
+	}
+	
+	private static void insertEntity(Attribute att, XMLStreamWriter writer) throws XMLStreamException{
+		writer.writeStartElement(XMLUtil.ATTRIBUTE);
+        
+        if(StringUtils.isNotEmpty(att.getName()))
+        	writer.writeAttribute(XMLUtil.ATTRIBUTE_NAME, att.getName());
+		if(att.getId() != null)
+    		writer.writeAttribute(XMLUtil.ID, att.getId().toString());
+        if(StringUtils.isNotEmpty(att.getValue()))
+        	writer.writeAttribute(XMLUtil.ATTRIBUTE_VALUE, att.getValue());
+        if(StringUtils.isNotEmpty(att.getContentType()))
+        	writer.writeAttribute(XMLUtil.CONTENT_TYPE, att.getContentType());
+        if(att.getVersion() != null)
+        	writer.writeAttribute(XMLUtil.VERSION, att.getVersion().toString());
+        if(att.getModificationTime() != null)
+        	writer.writeAttribute(XMLUtil.MODIFICATION_TIME, att.getModificationTime().toString());
+        
+		writer.writeEndElement();
+	}
+	
+	
+	
+	public static void main(String[] args) {
+		//ServiceRegistry srvReg = new ServiceRegistry();
+		//OM4StreamWriter.backupEntities("/Users/jurzua/ent.xml", srvReg.getPersistenceService());
+		logger.info(DateFormat.getInstance().format(new Date()));
+	}
+}