2013-04-19 2 views
1

내 Neo4j 데이터베이스의 서브 그래프에 대한 GraphViz 도트 파일을 생성하는 애플리케이션이 있습니다. 그것은 매력처럼 작동하지만 약간의 문제가 있습니다.사용자 정의 Neo4j GraphViz Writer

지금은 각 노드의 제목이 노드 ID입니다. 그런 다음 각각의 유형과 함께 특성이 나열됩니다. 이것은 필자가 필요로하는 것보다 많은 정보이며 GraphViz 작가가 구성된 방식을 변경하고 싶습니다.

GraphStyle, StyleParameter, StyleConfiguration과 같은 몇 가지 클래스/인터페이스를 알아 봤지만 몇 가지 시도를 해본 결과 해당 클래스 외부의 특정 클래스/인터페이스에 액세스 할 수 없다는 문제가 계속 발생했습니다. 어쩌면 내가 잘못하고있는 것일 수도 있습니다. 사용자가 GraphViz 작가를 재구성 할 수 없도록 설계 되었기 때문에 모르겠지만 알고 싶습니다.

도트 파일에 꼭 포함해야하는 정보, 즉 제목으로 선택한 속성과 노드 관련 정보 만 포함되도록 GraphViz 기록기를 어떻게 다시 구성해야합니까? 또한 이것은 항상 동일한 속성이 아니므로 일부 노드의 경우 속성 A가 제목이되고 속성 A가없는 노드의 경우 속성 B가 제목이되고 싶습니다.

도움을 주시면 감사하겠습니다.

답변

0

나는 그것을 작동시킬 수 있었다. 먼저, 두 개의 새로운 클래스를 생성해야합니다.

class NodeStyleImpl implements NodeStyle 
class RelationshipStyleImpl implements RelationshipStyle 

여기서 노드와 관계를 점 표기법으로 작성하는 방법을 정의 할 수 있습니다. 예제 구현은 다음과 같습니다.

public class NodeStyleImpl implements NodeStyle { 

    public void emitNodeStart(Appendable apndbl, Node node) throws IOException { 
     apndbl.append(" N" + node.getId() + " [\n label = \""); 
    } 

    public void emitEnd(Appendable apndbl) throws IOException { 
     apndbl.append("\"\n]\n"); 
    } 

    public void emitProperty(Appendable apndbl, String propkey, Object propvalue) throws IOException { 
     if(propkey.equals("propkeyone") || propkey.equals("propkeytwo"){ 
      apndbl.append(propvalue.toString()); 
     } 
    } 
} 

아날로그 방식으로 RelationshipStyleImpl을 작성할 수 있습니다. 고급 구성을 찾고 있다면 StyleConfiguration 구현을 작성할 수도 있습니다. 예제를 위해 Neo4j 코드의 기본 구현을 볼 수 있습니다.

그런 다음 GraphStyle 클래스에 문제가 있습니다. GraphStyle 클래스는 보호 된 생성자를 가지므로 패키지 내에서만 액세스 할 수 있습니다. 공개로 변경하라는 요청을했으나 잠시 후 해결 방법을 제공하는 약간의 "해킹"이 있습니다.

package org.neo4j.visualization.graphviz 

public class GraphStyleImpl extends GraphStyle { 

    private GraphStyleImpl (NodeStyleImpl nstyle, RelationshipStyleImpl rstyle) { 
     super(nstyle, rstyle); 
    } 
} 

패키지 선언에 유의하십시오. GraphStyle 생성자는 보호되어 있으므로 super (nstyle, rstyle) 메서드는 동일한 패키지 내에서만 액세스 할 수 있습니다. 새 공용 생성자 클래스를 확장함으로써, 이제 다음을 수행 할 수 있습니다 내 풀 요청이 수락됩니다 경우

GraphStyle graphstyle = new GraphStyleImpl(new NodeStyleImpl(), new RelationshipStyleImpl()); 
GraphvizWriter writer = new GraphvizWriter(graphstyle); 

의 GraphStyleImpl 클래스의 사용은 더 이상 필요하지 않을 것입니다.

2
+0

그래서 AsciiDocSimpleStyle은 나에게 다른 스타일을 제공합니다. 하지만 AsciiDocSimpleStyle을 사용자 정의 할 수는 없습니다. 맞습니까? 색상 측면이 아니라 내용면에서 점 파일로 푸시됩니다. –

+0

마지막 메서드를 사용하여 NodeStyle 및 RelationshipStyle 구현을 보낼 수 있습니다. 관계를 망치고 싶지 않으면 DefaultRelationshipStyle의 사본을 만드십시오. – nawroth

+0

또는 프로젝트를 포크하여 쉽게 확장 할 수 있습니다. 좋은 요청은 언제나 환영합니다.나는 그것을 문서 도구 내에서 사용하기 위해 수정했지만 그 이상은 보이지 않았다. – nawroth

관련 문제