package org.biohackathon.SPARQLBuilder.OWL;
import java.util.HashSet;
/**
* インスタンスへ、あるいはインスタンスからの1ステップリンクを記述する
* @author Norio KOBAYASHI
* @since 28.01.2014
* @version 29.01.2014
*/
public class InstanceLink {
private String propertyURI = null;
private String[] linkedClassURIs = null;
private String linkedInstanceURI = null;
private Direction direction = null;
/**
* プロパティURI、リンク先(元)インスタンス、リンクの向きを与える構成子
*
* リンク先 (元) インスタンスについては、それが属しているすべてのクラスも与える
*
* @param propertyURI プロパティのURI
* @param linkedInstanceURI リンクの主語、、あるいはリンクの目的語となっているインスタンスのURI
* @param linkedClassURIs linkedInstanceURIのインスタンスが属しているすべてのクラスのURIの配列
* @param direction プロパティの向き、linkedClassURIのクラスがリンク先になっているときはDirection.forward,リンク元になっているときはDirection.reverse, それら両方の時はDirection.bothを指定する
* @throws Exception
* @since 28.01.2014
*/
public InstanceLink(String propertyURI, String linkedInstanceURI, String[] linkedClassURIs, Direction direction){
this.propertyURI = propertyURI;
this.linkedInstanceURI = linkedInstanceURI;
this.linkedClassURIs = linkedClassURIs;
this.direction = direction;
}
/**
* linkedInstanceURIのインスタンスが属しているクラスを一つ追加する
*
* @param classURI 追加するlinkedInstanceURIのインスタンスが属しているクラスのURI
* @throws Exception
* @since 28.01.2014
*/
public void addLinkedClassURI(String classURI){
if( linkedClassURIs == null || linkedClassURIs.length == 0 ){
linkedClassURIs = new String[]{classURI};
}else{
HashSet hSet = new HashSet();
for(String clsURI: linkedClassURIs){
hSet.add(clsURI);
}
hSet.add(classURI);
linkedClassURIs = hSet.toArray(new String[0]);
}
}
/**
* 文字列表記を取得する
*
* @since 28.01.2014
*/
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append(propertyURI);
if( direction == Direction.forward ){
sb.append(" --> ");
}else{
if( direction == Direction.reverse ){
sb.append(" <-- ");
}else{
sb.append(" <-> ");
}
}
sb.append(linkedInstanceURI);
sb.append(" rdf:type [");
if( linkedClassURIs != null ){
for( int i = 0; i < linkedClassURIs.length; i++ ) {
if( i != 0 ) {
sb.append(", ");
}
sb.append(linkedClassURIs[i]);
}
}
sb.append("]");
return sb.toString();
}
public String getPropertyURI() {
return propertyURI;
}
public void setPropertyURI(String propertyURI) {
this.propertyURI = propertyURI;
}
public String[] getLinkedClassURIs() {
return linkedClassURIs;
}
public void setLinkedClassURIs(String[] linkedClassURIs) {
this.linkedClassURIs = linkedClassURIs;
}
public Direction getDirection() {
return direction;
}
public void setDirection(Direction direction) {
this.direction = direction;
}
public String getLinkedInstanceURI() {
return linkedInstanceURI;
}
public void setLinkedInstanceURI(String linkedInstanceURI) {
this.linkedInstanceURI = linkedInstanceURI;
}
// private String[] propertyDomainClassURIs = null;
// private String[] propertyRangeClassURIs = null;
}