comparison 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
comparison
equal deleted inserted replaced
0:143a88f17c0a 1:615d27dce9b3
1 package org.mpi.openmind.repository.utils;
2
3 import java.io.FileOutputStream;
4 import java.io.IOException;
5 import java.io.OutputStreamWriter;
6 import java.text.DateFormat;
7 import java.text.DecimalFormat;
8 import java.util.ArrayList;
9 import java.util.Date;
10 import java.util.List;
11
12 import javolution.xml.stream.XMLOutputFactory;
13 import javolution.xml.stream.XMLStreamException;
14 import javolution.xml.stream.XMLStreamWriter;
15
16 import org.apache.commons.lang.StringUtils;
17 import org.apache.log4j.Logger;
18 import org.mpi.openmind.repository.bo.Attribute;
19 import org.mpi.openmind.repository.bo.Entity;
20 import org.mpi.openmind.repository.bo.Node;
21 import org.mpi.openmind.repository.bo.Relation;
22 import org.mpi.openmind.repository.services.PersistenceService;
23 import org.mpi.openmind.scheduling.utils.Scheduling;
24
25 public class OM4StreamWriter {
26
27 private static Logger logger = Logger.getLogger(OM4StreamWriter.class);
28
29 private static int itemsPerPage = 500;
30
31 public static void backupEntities(String fileName, PersistenceService ps){
32 generateEntities(fileName, ps, Node.TYPE_ABOX);
33 }
34
35 public static void backupDefinitions(String fileName, PersistenceService ps){
36 generateEntities(fileName, ps, Node.TYPE_TBOX);
37 }
38
39 private static void generateEntities(String fileName, PersistenceService ps, String type) {
40 OutputStreamWriter out;
41 try {
42 FileOutputStream fileOut = new FileOutputStream (fileName);
43 out = new OutputStreamWriter (fileOut, "UTF-8");
44
45 XMLOutputFactory factory = XMLOutputFactory.newInstance();
46 factory.setProperty(XMLOutputFactory.INDENTATION, "\t");
47
48 XMLStreamWriter xmlStreamWriter = factory.createXMLStreamWriter(out);
49
50 int entitiesCount = 0;
51
52 xmlStreamWriter.writeStartDocument("UTF-8", "1.0");
53
54 if(type.equals(Node.TYPE_ABOX)){
55 xmlStreamWriter.writeStartElement(XMLUtil.OPENMIND_DATA);
56 entitiesCount = ps.getEntityCount(null).intValue();
57 }else{
58 xmlStreamWriter.writeStartElement(XMLUtil.META_DATA);
59 entitiesCount = ps.getEntityCount(Node.TYPE_TBOX).intValue();
60 }
61
62 int numberOfPages = entitiesCount / itemsPerPage;
63 int counter = 0;
64 long start = System.currentTimeMillis();
65 DecimalFormat df = new DecimalFormat("#.##");
66
67 List<Relation> relList = new ArrayList<Relation>();
68
69 //(type.equals(Node.TYPE_TBOX)) ? "" : ""
70
71 xmlStreamWriter.writeStartElement((type.equals(Node.TYPE_TBOX)) ? XMLUtil.DEFINITIONS : XMLUtil.ENTITIES);
72 for(int currentPage = 0; currentPage <= numberOfPages; currentPage++){
73 int startRecord = currentPage * itemsPerPage;
74 List<Entity> entities;
75
76 if(type.equals(Node.TYPE_ABOX)){
77 entities = ps.getEntityPage(null, startRecord, itemsPerPage);
78 }else{
79 entities = ps.getEntityPage(Node.TYPE_TBOX, startRecord, itemsPerPage);
80 }
81
82 for(Entity ent : entities){
83 insertEntity(ent, xmlStreamWriter, ps);
84 relList.addAll(ent.getSourceRelations());
85 counter++;
86 if ((counter % 50) == 0) {
87 System.out.print("*");
88 }
89 }
90 long diff = System.currentTimeMillis() - start;
91 double min = (double) diff / (double) (60 * 1000);
92 double percent = ((double) counter / (double) entitiesCount) * 100.0;
93 System.out.print("\n(" + df.format(percent) + "%) \t[" + counter + "/" + entitiesCount + "]\t");
94 logger.info("Speed[ents/min]: " + (double) counter / min);
95 xmlStreamWriter.flush();
96 }
97 xmlStreamWriter.writeEndElement();
98
99 xmlStreamWriter.writeStartElement(XMLUtil.RELATIONS);
100 for(Relation rel : relList){
101 insertRelation(rel, xmlStreamWriter);
102 }
103 xmlStreamWriter.writeEndElement();
104
105
106 //end file.
107 xmlStreamWriter.writeEndElement();
108
109 xmlStreamWriter.flush();
110 xmlStreamWriter.close();
111
112 logger.info("END Stream Writer");
113 } catch (IOException e) {
114 e.printStackTrace();
115 } catch (XMLStreamException e) {
116 // TODO Auto-generated catch block
117 e.printStackTrace();
118 }
119 }
120
121 private static void insertRelation(Relation rel, XMLStreamWriter writer) throws XMLStreamException{
122 writer.writeStartElement(XMLUtil.RELATION);
123
124 if(rel.getId() != null)
125 writer.writeAttribute(XMLUtil.ID, rel.getId().toString());
126 if(StringUtils.isNotEmpty(rel.getOwnValue()))
127 writer.writeAttribute(XMLUtil.OWN_VALUE, rel.getOwnValue());
128 if(StringUtils.isNotEmpty(rel.getObjectClass()))
129 writer.writeAttribute(XMLUtil.OBJECT_CLASS, rel.getObjectClass());
130 if(StringUtils.isNotEmpty(rel.getContentType()))
131 writer.writeAttribute(XMLUtil.CONTENT_TYPE, rel.getContentType());
132 if(rel.getSourceId() != null)
133 writer.writeAttribute(XMLUtil.RELATION_SOURCE_ID, rel.getSourceId().toString());
134 if(rel.getTargetId() != null)
135 writer.writeAttribute(XMLUtil.RELATION_TARGET_ID, rel.getTargetId().toString());
136 if(rel.getVersion() != null)
137 writer.writeAttribute(XMLUtil.VERSION, rel.getVersion().toString());
138 if(rel.getModificationTime() != null)
139 writer.writeAttribute(XMLUtil.MODIFICATION_TIME, rel.getModificationTime().toString());
140
141 writer.writeEndElement();
142 }
143
144 private static void insertEntity(Entity entity, XMLStreamWriter writer, PersistenceService ps) throws XMLStreamException{
145
146 writer.writeStartElement((entity.getType().equals(Node.TYPE_TBOX)) ? XMLUtil.DEFINITION : XMLUtil.ENTITY);
147
148 if(entity.isLightweight()){
149 entity = ps.getEntityContent(entity);
150 }
151
152 if(StringUtils.isNotEmpty(entity.getObjectClass()))
153 writer.writeAttribute(XMLUtil.OBJECT_CLASS, entity.getObjectClass());
154 if(entity.getId() != null)
155 writer.writeAttribute(XMLUtil.ID, entity.getId().toString());
156 if(StringUtils.isNotEmpty(entity.getOwnValue()))
157 writer.writeAttribute(XMLUtil.OWN_VALUE, entity.getOwnValue());
158 if(StringUtils.isNotEmpty(entity.getContentType()))
159 writer.writeAttribute(XMLUtil.CONTENT_TYPE, entity.getContentType());
160 if(entity.getVersion() != null)
161 writer.writeAttribute(XMLUtil.VERSION, entity.getVersion().toString());
162 if(entity.getModificationTime() != null)
163 writer.writeAttribute(XMLUtil.MODIFICATION_TIME, entity.getModificationTime().toString());
164
165
166 if(entity.getAttributes().size() > 0){
167 writer.writeStartElement(XMLUtil.ATTRIBUTES);
168 for(Attribute att : entity.getAttributes()){
169 insertEntity(att, writer);
170 }
171 writer.writeEndElement();
172 }
173
174 writer.writeEndElement();
175 }
176
177 private static void insertEntity(Attribute att, XMLStreamWriter writer) throws XMLStreamException{
178 writer.writeStartElement(XMLUtil.ATTRIBUTE);
179
180 if(StringUtils.isNotEmpty(att.getName()))
181 writer.writeAttribute(XMLUtil.ATTRIBUTE_NAME, att.getName());
182 if(att.getId() != null)
183 writer.writeAttribute(XMLUtil.ID, att.getId().toString());
184 if(StringUtils.isNotEmpty(att.getValue()))
185 writer.writeAttribute(XMLUtil.ATTRIBUTE_VALUE, att.getValue());
186 if(StringUtils.isNotEmpty(att.getContentType()))
187 writer.writeAttribute(XMLUtil.CONTENT_TYPE, att.getContentType());
188 if(att.getVersion() != null)
189 writer.writeAttribute(XMLUtil.VERSION, att.getVersion().toString());
190 if(att.getModificationTime() != null)
191 writer.writeAttribute(XMLUtil.MODIFICATION_TIME, att.getModificationTime().toString());
192
193 writer.writeEndElement();
194 }
195
196
197
198 public static void main(String[] args) {
199 //ServiceRegistry srvReg = new ServiceRegistry();
200 //OM4StreamWriter.backupEntities("/Users/jurzua/ent.xml", srvReg.getPersistenceService());
201 logger.info(DateFormat.getInstance().format(new Date()));
202 }
203 }