public static WorksheetEntry fromParser(XmlPullParser parser) throws XmlPullParserException, IOException { final int depth = parser.getDepth(); final WorksheetEntry entry = new WorksheetEntry(); String tag = null; int type; while (((type = parser.next()) != END_TAG || parser.getDepth() > depth) && type != END_DOCUMENT) { if (type == START_TAG) { tag = parser.getName(); if (LINK.equals(tag)) { final String rel = parser.getAttributeValue(null, REL); final String href = parser.getAttributeValue(null, HREF); if (REL_LISTFEED.equals(rel)) { entry.mListFeed = href; } } } else if (type == END_TAG) { tag = null; } else if (type == TEXT) { final String text = parser.getText(); if (TITLE.equals(tag)) { entry.mTitle = text; } else if (UPDATED.equals(tag)) { entry.mUpdated = ParserUtils.parseTime(text); } } } return entry; }
private Audit auditRelationshipHelper( Audit audit, AuditAction action, Vertex sourceVertex, Vertex destVertex, String label, String process, String comment, User user, Visibility visibility) { visibility = orVisibility(visibility); audit .getAuditCommon() .setUser(user, visibility) .setAction(action, visibility) .setType(OntologyRepository.TYPE_RELATIONSHIP, visibility) .setComment(comment, visibility) .setProcess(process, visibility) .setUnixBuildTime( versionService.getUnixBuildTime() != null ? versionService.getUnixBuildTime() : -1L, visibility) .setScmBuildNumber( versionService.getScmBuildNumber() != null ? versionService.getScmBuildNumber() : "", visibility) .setVersion( versionService.getVersion() != null ? versionService.getVersion() : "", visibility); audit .getAuditRelationship() .setSourceId(sourceVertex.getId(), visibility) .setSourceType(CONCEPT_TYPE.getPropertyValue(sourceVertex), visibility) .setSourceTitle(TITLE.getPropertyValue(sourceVertex), visibility) .setDestId(destVertex.getId(), visibility) .setDestTitle(TITLE.getPropertyValue(destVertex), visibility) .setDestType(CONCEPT_TYPE.getPropertyValue(destVertex), visibility) .setLabel(label, visibility); return audit; }
@Override protected void execute(Search search, SearchKey key, SolrDocumentList documents) throws ActionException { Parameter param = em.find(Parameter.class, "SEARCH_REPO"); String repo = param.getValue(); File repoDir = new File( repo + File.separator + search.getConfig().getId() + File.separator + search.getId()); repoDir.mkdirs(); ImageRenderer imageRenderer = new ImageRenderer(); Transcoder transcoder = new PDFTranscoder(); for (SolrDocument doc : documents) { String docUrl = (String) doc.getFieldValue(URL.toString()); String docTitle = (String) doc.getFieldValue(TITLE.toString()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); File outputFile = new File(repoDir.getAbsolutePath() + File.separator + docTitle + ".pdf"); try { imageRenderer.renderURL(docUrl, outputStream, ImageRenderer.Type.SVG); } catch (IOException | SAXException e) { log.error("SVG rendering problem", e); createErrorFile(docUrl, outputFile, e); continue; } byte[] svgBytes = outputStream.toByteArray(); ByteArrayInputStream inputStream = new ByteArrayInputStream(svgBytes); TranscoderInput transcoderInput = new TranscoderInput(inputStream); TranscoderOutput transcoderOutput = null; try { transcoderOutput = new TranscoderOutput(new FileOutputStream(outputFile)); } catch (FileNotFoundException e) { log.warn("this shouldn't happen!", e); createErrorFile(docUrl, outputFile, e); continue; } try { transcoder.transcode(transcoderInput, transcoderOutput); } catch (TranscoderException e) { log.warn("Transcoding problem", e); createErrorFile(docUrl, outputFile, e); continue; } } }
@Override public void handle(HttpServletRequest request, HttpServletResponse response, HandlerChain chain) throws Exception { final String artifactId = getRequiredParameter(request, "artifactId"); final String propertyKey = getRequiredParameter(request, "propertyKey"); final long mentionStart = getRequiredParameterAsLong(request, "mentionStart"); final long mentionEnd = getRequiredParameterAsLong(request, "mentionEnd"); final String title = getRequiredParameter(request, "sign"); final String conceptId = getRequiredParameter(request, "conceptId"); final String visibilitySource = getRequiredParameter(request, "visibilitySource"); final String resolvedVertexId = getOptionalParameter(request, "resolvedVertexId"); final String justificationText = getOptionalParameter(request, "justificationText"); final String sourceInfo = getOptionalParameter(request, "sourceInfo"); String termMentionRowKeyString = getOptionalParameter(request, "rowKey"); User user = getUser(request); String workspaceId = getActiveWorkspaceId(request); Workspace workspace = workspaceRepository.findById(workspaceId, user); Authorizations authorizations = getAuthorizations(request, user); JSONObject visibilityJson = GraphUtil.updateVisibilitySourceAndAddWorkspaceId(null, visibilitySource, workspaceId); LumifyVisibility visibility = this.visibilityTranslator.toVisibility(visibilityJson); if (!graph.isVisibilityValid(visibility.getVisibility(), authorizations)) { LOGGER.warn( "%s is not a valid visibility for %s user", visibilitySource, user.getDisplayName()); respondWithBadRequest(response, "visibilitySource", STRINGS.getString("visibility.invalid")); chain.next(request, response); return; } Object id = resolvedVertexId == null ? graph.getIdGenerator().nextId() : resolvedVertexId; Concept concept = ontologyRepository.getConceptByIRI(conceptId); final Vertex artifactVertex = graph.getVertex(artifactId, authorizations); LumifyVisibility lumifyVisibility = visibilityTranslator.toVisibility(visibilityJson); Map<String, Object> metadata = new HashMap<String, Object>(); LumifyVisibilityProperties.VISIBILITY_JSON_PROPERTY.setMetadata(metadata, visibilityJson); ElementMutation<Vertex> vertexMutation; Vertex vertex; if (resolvedVertexId != null) { vertex = graph.getVertex(id, authorizations); vertexMutation = vertex.prepareMutation(); } else { vertexMutation = graph.prepareVertex(id, lumifyVisibility.getVisibility()); GraphUtil.addJustificationToMutation( vertexMutation, justificationText, sourceInfo, lumifyVisibility); CONCEPT_TYPE.setProperty( vertexMutation, conceptId, metadata, lumifyVisibility.getVisibility()); TITLE.addPropertyValue( vertexMutation, MULTI_VALUE_KEY, title, metadata, lumifyVisibility.getVisibility()); vertex = vertexMutation.save(authorizations); auditRepository.auditVertexElementMutation( AuditAction.UPDATE, vertexMutation, vertex, "", user, lumifyVisibility.getVisibility()); LumifyVisibilityProperties.VISIBILITY_JSON_PROPERTY.setProperty( vertexMutation, visibilityJson, metadata, lumifyVisibility.getVisibility()); this.graph.flush(); workspaceRepository.updateEntityOnWorkspace( workspace, vertex.getId(), false, null, null, user); } // TODO: a better way to check if the same edge exists instead of looking it up every time? Edge edge = graph.addEdge( artifactVertex, vertex, this.artifactHasEntityIri, lumifyVisibility.getVisibility(), authorizations); LumifyVisibilityProperties.VISIBILITY_JSON_PROPERTY.setProperty( edge, visibilityJson, metadata, lumifyVisibility.getVisibility(), authorizations); auditRepository.auditRelationship( AuditAction.CREATE, artifactVertex, vertex, edge, "", "", user, lumifyVisibility.getVisibility()); TermMentionRowKey termMentionRowKey; if (termMentionRowKeyString != null) { termMentionRowKey = new TermMentionRowKey(RowKeyHelper.jsonDecode(termMentionRowKeyString)); } else { termMentionRowKey = new TermMentionRowKey( artifactId, propertyKey, mentionStart, mentionEnd, edge.getId().toString()); } TermMentionModel termMention = new TermMentionModel(termMentionRowKey); termMention .getMetadata() .setSign(title, lumifyVisibility.getVisibility()) .setOntologyClassUri(concept.getDisplayName(), lumifyVisibility.getVisibility()) .setConceptGraphVertexId(concept.getTitle(), lumifyVisibility.getVisibility()) .setVertexId(vertex.getId().toString(), lumifyVisibility.getVisibility()) .setEdgeId(edge.getId().toString(), lumifyVisibility.getVisibility()); termMentionRepository.save(termMention); vertexMutation.addPropertyValue( graph.getIdGenerator().nextId().toString(), LumifyProperties.ROW_KEY.getPropertyName(), termMentionRowKey.toString(), metadata, lumifyVisibility.getVisibility()); vertexMutation.save(authorizations); this.graph.flush(); workQueueRepository.pushTextUpdated(artifactId); workQueueRepository.pushElement(edge); JSONObject result = new JSONObject(); result.put("success", true); respondWithJson(response, result); }
public List<Audit> auditRelationship( AuditAction action, Vertex sourceVertex, Vertex destVertex, Edge edge, String process, String comment, User user, Visibility visibility) { checkNotNull(action, "action cannot be null"); checkNotNull(sourceVertex, "sourceVertex cannot be null"); checkNotNull(destVertex, "destVertex cannot be null"); checkNotNull(edge, "edge cannot be null"); checkNotNull(process, "process cannot be null"); checkNotNull(comment, "comment cannot be null"); checkNotNull(user, "user cannot be null"); Audit auditSourceDest = new Audit(AuditRowKey.build(sourceVertex.getId(), destVertex.getId())); Audit auditDestSource = new Audit(AuditRowKey.build(destVertex.getId(), sourceVertex.getId())); Audit auditEdge = new Audit(AuditRowKey.build(edge.getId())); visibility = orVisibility(visibility); List<Audit> audits = new ArrayList<Audit>(); String displayLabel = ontologyRepository.getDisplayNameForLabel(edge.getLabel()); audits.add( auditRelationshipHelper( auditSourceDest, action, sourceVertex, destVertex, displayLabel, process, comment, user, visibility)); audits.add( auditRelationshipHelper( auditDestSource, action, sourceVertex, destVertex, displayLabel, process, comment, user, visibility)); auditEdge .getAuditCommon() .setUser(user, visibility) .setAction(action, visibility) .setType(OntologyRepository.TYPE_RELATIONSHIP, visibility) .setComment(comment, visibility) .setProcess(process, visibility) .setUnixBuildTime( versionService.getUnixBuildTime() != null ? versionService.getUnixBuildTime() : -1L, visibility) .setScmBuildNumber( versionService.getScmBuildNumber() != null ? versionService.getScmBuildNumber() : "", visibility) .setVersion( versionService.getVersion() != null ? versionService.getVersion() : "", visibility); auditEdge .getAuditRelationship() .setSourceId(sourceVertex.getId(), visibility) .setSourceType(CONCEPT_TYPE.getPropertyValue(sourceVertex), visibility) .setSourceTitle(TITLE.getPropertyValue(sourceVertex), visibility) .setDestId(destVertex.getId(), visibility) .setDestTitle(TITLE.getPropertyValue(destVertex), visibility) .setDestType(CONCEPT_TYPE.getPropertyValue(destVertex), visibility) .setLabel(displayLabel, visibility); audits.add(auditEdge); saveMany(audits); return audits; }