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;
  }
Example #2
0
  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);
  }
Example #5
0
  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;
  }