Mercurial > hg > openmind
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())); + } +}