public Relationship addRelationship()

in rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java [235:311]


    public Relationship addRelationship(Vector parentNames, Vector childNames, String relationshipName) {
        //create vector for each
        if(parentNames.size() != childNames.size()){
            throw new RuntimeException("Can not for relationship for multiple keys, different sizes");
        }
        
        Vector parentColumns = new Vector();
        Vector childColumns = new Vector();
        
        for(int i=0; i<parentNames.size(); i++){
            QualifiedColumn parent = null;
            QualifiedColumn child = null;
            
            if(this.config.isDatabaseSchemaNameSupported()){
            	parent = new QualifiedColumn((String)parentNames.get(i), true);
            	child = new QualifiedColumn((String)childNames.get(i), true);
            }
            else{
            	parent = new QualifiedColumn((String)parentNames.get(i));
            	child = new QualifiedColumn((String)childNames.get(i));
            }
            
            parentColumns.add(parent);
            childColumns.add(child);
        }

        //all parent columns should be from same table and schema
        //all child columns should be from same table and schema
        checkTableNames(parentColumns);
    	checkSchemaNames(parentColumns);
        
        checkTableNames(childColumns);
    	checkSchemaNames(childColumns);
        
        Relationship r = FACTORY.createRelationship();
        //JIRA-952
        if(this.config.isDatabaseSchemaNameSupported()){
        	if(relationshipName == null)
        		r.setName(((QualifiedColumn)childColumns.get(0)).getSchemaName()+"."
        				+((QualifiedColumn)childColumns.get(0)).getTableName());
        	else
        		r.setName(relationshipName);
        	
            r.setPrimaryKeyTable(((QualifiedColumn)parentColumns.get(0)).getSchemaName()+"."
            		+((QualifiedColumn)parentColumns.get(0)).getTableName());
            r.setForeignKeyTable(((QualifiedColumn)childColumns.get(0)).getSchemaName()+"."
            		+((QualifiedColumn)childColumns.get(0)).getTableName());        	
        }
        else{
        	if(relationshipName == null)
        		r.setName(((QualifiedColumn)childColumns.get(0)).getTableName());
        	else
        		r.setName(relationshipName);
        	
	        r.setPrimaryKeyTable(((QualifiedColumn)parentColumns.get(0)).getTableName());
	        r.setForeignKeyTable(((QualifiedColumn)childColumns.get(0)).getTableName());
        }

        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Created relationship from " + r.getPrimaryKeyTable() 
                    + " to " + r.getForeignKeyTable() + " named " + r.getName());
        }
        
        KeyPair pair = null;
        
        for(int i=0; i<parentColumns.size(); i++){
            pair = FACTORY.createKeyPair();
            pair.setPrimaryKeyColumn(((QualifiedColumn)parentColumns.get(i)).getColumnName());
            pair.setForeignKeyColumn(((QualifiedColumn)childColumns.get(i)).getColumnName());
            r.getKeyPair().add(pair);
        }
        
        r.setMany(true);
        config.getRelationship().add(r);

        return r;
    }