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