Mercurial > hg > openmind
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 } |