relationmaxcardinality.java

来自「toocom源代码,主要应用在本体匹配方面!」· Java 代码 · 共 85 行

JAVA
85 行
字号
package toocom.ocgl;

import java.util.*;
import java.awt.Graphics;

/**
 * This class represents the maximum cardinality of a relation type.
 *
 * @author Fr閐閞ic F黵st
 */
public class RelationMaxCardinality extends AxiomSchemaOne{
	
	private int index;
	private int value;
	
	public RelationMaxCardinality(RelationType rt, int index, int value){
		super(CGConstants.getRelationMaxCardinalityTerms(),rt);
		this.index = index;
		this.value = value;
	}
	
	public int getIndex(){
		return this.index;
	}
	
	public int getValue(){
		return this.value;
	}
	
	/** Returns the value of the (first encountered) max cardinality of prim at the index i. Returns -1
	 *  if prim has any max cardinality for this index. */
	public static int getMaxCardinality(ConceptualPrimitive prim,int i){
		for(Iterator j = prim.getAxiomSchemata("toocom.ocgl.RelationMaxCardinality").iterator();j.hasNext();){
			RelationMaxCardinality maxCard = (RelationMaxCardinality) j.next();
			if(maxCard.getIndex() == i) return maxCard.getValue();
		}
		return -1;
	}
	
	/** A primitive can support a maximum cardinality if it is a relation. */
	public boolean isValid(){
		return (super.cp instanceof RelationType);
	}
	
	public LinkedList getOperationalForm(Ontology onto,Language l){
		return new LinkedList();
	}
	
	public Axiom getAxiomForm(){
		Axiom axiom = new Axiom(CGConstants.getRelationMaxCardinalityTerms());
		axiom.getTerms().appendWithSeparator(((RelationType) super.cp).getTerms()," - ");
		Concept c = new Concept(((RelationType) super.cp).getSignature().getConceptType(this.index));
		axiom.addHypothesisConcept(c);
		for(int cpt = 1;cpt <= this.value;cpt ++){
			Relation r = new Relation(((RelationType) super.cp));
			r.setLinkedConcept(c,this.index);
			axiom.addHypothesisRelation(r);
			for(int cptBis = 1;cptBis <= ((RelationType) super.cp).getArity();cptBis ++){
				if(cptBis != this.index){
					Concept con = new Concept(((RelationType) super.cp).getSignature().getConceptType(cptBis));
					r.setLinkedConcept(con,cptBis);
					axiom.addHypothesisConcept(con);
				}
			}
		}
		Relation r = new Relation(((RelationType) super.cp));
		r.setTerms(r.getTerms().denyTerms());
		r.setLinkedConcept(c,this.index);
		axiom.addConclusionRelation(r);
		for(int cptBis = 1;cptBis <= ((RelationType) super.cp).getArity();cptBis ++){
			if(cptBis != index){
				Concept con = new Concept(((RelationType) super.cp).getSignature().getConceptType(cptBis));
				r.setLinkedConcept(con,cptBis);
				axiom.addHypothesisConcept(con);
			}
		}
		return axiom;
	}
	
	public void paint(Graphics g,Language l){
		g.setColor(CGConstants.MAX_CARDINALITY_COLOR);
		g.drawString("C+",super.cp.x - (CGConstants.PROPERTY_SYMBOLS_SPACING * 12),super.cp.y - (CGConstants.PROPERTY_SYMBOLS_SPACING * 4));	
	}
		
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?