# HG changeset patch # User Robert Casties # Date 1517857598 -3600 # Node ID d4b456623d431aff020f11b594b5e0a298008a92 # Parent 1aff84e5048de57bd8d4b80a15daeb880d1af0bd Updated XML export. Saves relation source-type and target-type. Expanded statistics with per-entity-type relation counts. diff -r 1aff84e5048d -r d4b456623d43 src/main/java/org/mpi/openmind/repository/bo/Node.java --- a/src/main/java/org/mpi/openmind/repository/bo/Node.java Fri Oct 20 12:48:31 2017 +0200 +++ b/src/main/java/org/mpi/openmind/repository/bo/Node.java Mon Feb 05 20:06:38 2018 +0100 @@ -334,6 +334,11 @@ return isPublic; } + /** + * Set the public state of this Node. + * + * @param isPublic + */ public void setIsPublic(Boolean isPublic) { this.isPublic = isPublic; } diff -r 1aff84e5048d -r d4b456623d43 src/main/java/org/mpi/openmind/repository/utils/OM4StreamWriter.java --- a/src/main/java/org/mpi/openmind/repository/utils/OM4StreamWriter.java Fri Oct 20 12:48:31 2017 +0200 +++ b/src/main/java/org/mpi/openmind/repository/utils/OM4StreamWriter.java Mon Feb 05 20:06:38 2018 +0100 @@ -147,8 +147,19 @@ // write entity to XML writeEntity(ent, writer, ps, includeNorm, entStats); // add (source)relations to list - relList.addAll(ent.getSourceRelations()); - + List rels = ent.getSourceRelations(); + relList.addAll(rels); + // update stats for relations + Map entRelStats = entStats.get(ent.getObjectClass()); + for (Relation rel: rels) { + // update source relations + updateRelStats(rel, true, entRelStats); + } + for (Relation rel: ent.getTargetRelations()) { + // update target relations + updateRelStats(rel, false, entRelStats); + } + // count entities counter++; } @@ -217,7 +228,9 @@ writer.writeAttribute(XMLUtil.CONTENT_TYPE, rel.getContentType()); } writer.writeAttribute(XMLUtil.RELATION_SOURCE_ID, defaultString(rel.getSourceId())); + writer.writeAttribute(XMLUtil.RELATION_SOURCE, defaultString(rel.getSourceObjectClass())); writer.writeAttribute(XMLUtil.RELATION_TARGET_ID, defaultString(rel.getTargetId())); + writer.writeAttribute(XMLUtil.RELATION_TARGET, defaultString(rel.getTargetObjectClass())); writer.writeAttribute(XMLUtil.VERSION, defaultString(rel.getVersion())); writer.writeAttribute(XMLUtil.MODIFICATION_TIME, defaultString(rel.getModificationTime())); if (rel.getUser() != null) { @@ -267,6 +280,7 @@ writer.writeStartElement((entity.getType().equals(Node.TYPE_TBOX)) ? XMLUtil.DEFINITION : XMLUtil.ENTITY); if (entity.isLightweight()) { + // make sure we have all attributes and relations entity = ps.getEntityContent(entity); } @@ -297,9 +311,9 @@ if (entity.getAttributes().size() > 0) { writer.writeStartElement(XMLUtil.ATTRIBUTES); for (Attribute att : entity.getAttributes()) { - // update stats - updateAttStats(att, attStats); - // write xml + // update stats + updateAttStats(att, attStats); + // write xml writeAttribute(att, writer, includeNorm); } writer.writeEndElement(); @@ -362,60 +376,65 @@ } - private static void writeStats(String statsTag, String entryTag, Map> nodeStats, XMLStreamWriter writer) - throws XMLStreamException { - // write stats tag + private static void writeStats(String statsTag, String entryTag, Map> nodeStats, + XMLStreamWriter writer) throws XMLStreamException { + // write stats tag writer.writeStartElement(statsTag); - + for (String nodeType : nodeStats.keySet()) { - Map attStats = nodeStats.get(nodeType); - Long nodeCnt = attStats.get(ENT_KEY); - // write tag for entity/attribute - writer.writeStartElement(entryTag); - writer.writeAttribute(XMLUtil.OBJECT_CLASS, (nodeType == null)?"null":nodeType); - writer.writeAttribute(XMLUtil.COUNT, nodeCnt.toString()); - - // write attributes - for (String attName : attStats.keySet()) { - // skip ENT_KEY - if (attName.equals(ENT_KEY)) continue; - // write attribute tag - writer.writeStartElement(XMLUtil.ATTRIBUTE); - writer.writeAttribute(XMLUtil.ATTRIBUTE_NAME, attName); - Long attCnt = attStats.get(attName); - writer.writeAttribute(XMLUtil.COUNT, attCnt.toString()); - writer.writeEndElement(); - } - // end of entity/attribute tag - writer.writeEndElement(); + Map attStats = nodeStats.get(nodeType); + Long nodeCnt = attStats.get(ENT_KEY); + // write tag for entity/attribute + writer.writeStartElement(entryTag); + writer.writeAttribute(XMLUtil.OBJECT_CLASS, (nodeType == null) ? "null" : nodeType); + writer.writeAttribute(XMLUtil.COUNT, nodeCnt.toString()); + + // write attributes + for (String attName : attStats.keySet()) { + // skip ENT_KEY + if (attName.equals(ENT_KEY)) + continue; + if (attName.contains("[")) { + // write relation tag + writer.writeStartElement(XMLUtil.RELATION); + } else { + // write attribute tag + writer.writeStartElement(XMLUtil.ATTRIBUTE); + } + writer.writeAttribute(XMLUtil.ATTRIBUTE_NAME, attName); + Long attCnt = attStats.get(attName); + writer.writeAttribute(XMLUtil.COUNT, attCnt.toString()); + writer.writeEndElement(); + } + // end of entity/attribute tag + writer.writeEndElement(); } // end of stats tag writer.writeEndElement(); - } - + } /** * @param objectClass * @param entStats * @return */ - protected static Map updateNodeStats(Node ent, Map> entStats) { - String objectClass = ent.getObjectClass(); + protected static Map updateNodeStats(Node ent, Map> entStats) { + String objectClass = ent.getObjectClass(); Map attStats = entStats.get(objectClass); if (attStats == null) { - // create new attribute stats entry - attStats = new HashMap(); - // add key to count entities - attStats.put(ENT_KEY, 1l); - // add to map - entStats.put(objectClass, attStats); + // create new attribute stats entry + attStats = new HashMap(); + // add key to count entities + attStats.put(ENT_KEY, 1l); + // add to map + entStats.put(objectClass, attStats); } else { - // increment entity count - Long entCnt = attStats.get(ENT_KEY); - attStats.put(ENT_KEY, entCnt + 1); + // increment entity count + Long entCnt = attStats.get(ENT_KEY); + attStats.put(ENT_KEY, entCnt + 1); } - return attStats; - } + return attStats; + } /** * @param att @@ -431,6 +450,30 @@ } } + /** + * Update relation statistics. + * + * Relation stats are saved like attribute stats but with "[entity-type]" before + * or after the relation name. + * + * @param rel + * @param relStats + */ + protected static void updateRelStats(Relation rel, boolean isSrcRel, Map relStats) { + String relName = rel.getObjectClass(); + if (isSrcRel) { + relName = relName + "[" + rel.getTargetObjectClass() + "]"; + } else { + relName = "[" + rel.getSourceObjectClass() + "]" + relName; + } + Long cnt = relStats.get(relName); + if (cnt == null) { + relStats.put(relName, 1l); + } else { + relStats.put(relName, cnt + 1); + } + } + } diff -r 1aff84e5048d -r d4b456623d43 src/main/java/org/mpi/openmind/repository/utils/XMLUtil.java --- a/src/main/java/org/mpi/openmind/repository/utils/XMLUtil.java Fri Oct 20 12:48:31 2017 +0200 +++ b/src/main/java/org/mpi/openmind/repository/utils/XMLUtil.java Mon Feb 05 20:06:38 2018 +0100 @@ -199,6 +199,11 @@ } catch (TransformerConfigurationException e) { System.out.println("Transformer configuration error: " + e.getMessage()); + try { + fos.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } return false; } DOMSource source = new DOMSource(doc);