private HashSet getChangedFields()

in rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java [198:233]


    private HashSet getChangedFields(MappingWrapper config, ChangeSummary summary, DataObject obj, TableWrapper tw) {
        HashSet changes = new HashSet();
        
        Iterator i = summary.getOldValues(obj).iterator();
        while (i.hasNext()) {
            ChangeSummary.Setting setting = (ChangeSummary.Setting) i.next();
            
            if (setting.getProperty().getType().isDataType()) {
               if ( changes.add(setting.getProperty()) == false ) {
                   throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
               }
            } else {
                Property ref = setting.getProperty();
                
                Relationship relationship = config.getRelationshipByReference(ref);
                if ((ref.getOpposite() != null && ref.getOpposite().isMany()) 
                        || (hasState(tw, relationship, obj))) {
                    RelationshipWrapper r = new RelationshipWrapper(config.getRelationshipByReference(ref));

                    Iterator keys = r.getForeignKeys().iterator();
                    while (keys.hasNext()) {
                        String key = (String) keys.next();
                        String keyProperty = config.getColumnPropertyName(tw.getTableName(), key);
                        Property keyProp = obj.getType().getProperty(keyProperty);
                        if ( keyProp == null ) {
                            throw new RuntimeException("Invalid foreign key column: " + key);
                        }
                        if (changes.add(keyProp) == false) {
                            throw new RuntimeException("Foreign key properties should not be set when the corresponding relationship has changed");
                        }
                    }
                }
            }
        }
        return changes;
    }