Changeset 2006


Ignore:
Timestamp:
06/22/09 19:31:26 (3 years ago)
Author:
mswertz
Message:

Further built the CustomQuery? facility by expanding on the MetaDatabase? facility.

Location:
molgenis3_3/src/org/molgenis
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • molgenis3_3/src/org/molgenis/framework/data/CustomQuery.java

    r1987 r2006  
    3131                                Field field = getDatabase().getMetaData().findField(f); 
    3232                                if (field == null) throw new DatabaseException("couldn't find " + f); 
    33                                 this.fields.add(getDatabase().getMetaData().findField(f)); 
     33                                this.fields.add(field); 
    3434                        } 
    3535                        catch (MolgenisModelException e) 
     
    4848                try 
    4949                { 
    50                         List<QueryRule> rules = Arrays.asList(super.getRules()); 
    51                         String sql = toFindSql(rules); 
    52                         return ((JDBCDatabase) getDatabase()).sql(sql, (QueryRule[])rules.toArray()); 
     50                        String sql = toFindSql(super.getRules()); 
     51                        return ((JDBCDatabase) getDatabase()).sql(sql, super.getRules()); 
    5352                } 
    5453                catch (MolgenisModelException e) 
    5554                { 
    56                         // TODO Auto-generated catch block 
    5755                        e.printStackTrace(); 
    5856                        throw new DatabaseException(e); 
     
    7371        } 
    7472 
    75         public String toFindSql(List<QueryRule> rules) throws DatabaseException, MolgenisModelException 
     73        public String toFindSql(QueryRule... ruleArray) throws DatabaseException, MolgenisModelException 
    7674        { 
    7775                if (fields.size() == 0) throw new DatabaseException("no fields selected"); 
    7876                List<Entity> entities = new ArrayList<Entity>(); 
     77                List<QueryRule> rules = new ArrayList<QueryRule>(); 
     78                rules.addAll(Arrays.asList(ruleArray)); 
    7979 
    8080                // find the entities 
     
    9292                                for (QueryJoinRule jr : findShortestJoinPath(ed1, ed2)) 
    9393                                { 
    94                                         if (!rules.contains(jr)) rules.add(jr); 
     94                                        if (!rules.contains(jr)) 
     95                                        { 
     96                                                rules.add(jr); 
     97                                        } 
    9598                                } 
    9699 
     
    176179                        if (r instanceof QueryJoinRule) 
    177180                        { 
    178                                 QueryJoinRule edge = (QueryJoinRule)r; 
     181                                QueryJoinRule edge = (QueryJoinRule) r; 
    179182                                Logger.getLogger("HAAT").debug("comparing " + edge.getA() + " " + edge.getB()); 
    180183                                // direct? 
     
    209212                                        return path; 
    210213                                } 
     214                                // cyclic path are not supported 
     215                                else if (fd.getXRefEntity().equals(e2.getName())) 
     216                                { 
     217                                        ; 
     218                                } 
    211219                                else 
    212220                                // indirect path 
     
    250258                                        return path; 
    251259                                } 
     260                                // cyclic path 
     261                                else if (fd.getXRefEntity().equals(e1.getName())) 
     262                                { 
     263                                        ; 
     264                                } 
    252265                                // indirect path 
    253266                                else 
  • molgenis3_3/src/org/molgenis/framework/data/jdbc/JDBCDatabase.java

    r2000 r2006  
    208208                catch (Exception e) 
    209209                { 
     210                        e.printStackTrace(); 
    210211                        throw new DatabaseException(e); 
    211212                } 
  • molgenis3_3/src/org/molgenis/generators/data/JDBCMetaDatabaseGen.java.ftl

    r1987 r2006  
    4848                { 
    4949                        <#list model.entities as entity> 
    50                         Entity ${name(entity)}_entity = new Entity("${entity.name}",this.getDatabase()); 
    51                         ${name(entity)}_entity.setImplements(new String[]{${csv(entity.implements)}}); 
     50                        Entity ${name(entity)}_entity = new Entity("${entity.name}",this.getDatabase());<#if entity.hasImplements()> 
     51                        ${name(entity)}_entity.setImplements(new String[]{${csv(entity.implements)}});</#if><#if entity.hasAncestor()> 
     52                        ${name(entity)}_entity.setParents(new String[]{"${entity.getAncestor().name}"});</#if> 
    5253                        <#list entity.fields as field> 
    5354                        Field ${name(entity)}_${name(field)}_field = new Field(${name(entity)}_entity, "${field.name}", Field.Type.getType("${field.type}")); 
    5455                        <#if field.type == "xref" || field.type == "mref">${name(entity)}_${name(field)}_field.setXRefVariables("${field.XRefEntity}", "${field.XRefField}","${field.XRefLabelString}");</#if> 
    5556                        ${name(entity)}_entity.addField(${name(entity)}_${name(field)}_field); 
     57                        </#list> 
     58                        <#list entity.keys as key> 
     59                        ${name(entity)}_entity.addKey(new String[]{${csv(key.fields)}},<#if key.isSubclass()>true<#else>false</#if>,""); 
    5660                        </#list> 
    5761                         
  • molgenis3_3/src/org/molgenis/generators/doc/ClassDocGen.java.ftl

    r1975 r2006  
    4343<b>${field.name}</b>: ${field.type}  
    4444(<#if field.nillable == false>required<#else>optional</#if>) 
    45 <#if field.entity.name != entity.name><i>inherited from ${field.entity.name}</i></#if> 
    4645</td> 
    4746</tr> 
     
    6665<#elseif field.type=="mref"> 
    6766${field.getXRefEntity()} (<#if field.nillable>0<#else>1</#if>..n)</#if> 
    68 <#if field.entity.name != entity.name><i>inherited from ${field.entity.name}</i></#if> 
    6967</td> 
    7068</tr> 
  • molgenis3_3/src/org/molgenis/model/syntax/Entity.java

    r1988 r2006  
    404404                return implements_entities; 
    405405        } 
    406          
    407         public void setImplements(String ...implements_parents) 
     406 
     407        public void setImplements(String... implements_parents) 
    408408        { 
    409409                this.setImplements(new Vector<String>(Arrays.asList(implements_parents))); 
     
    570570                                all_fields.add(f); 
    571571                        } 
    572                         // else 
     572                        else 
    573573                        // replace with local variant 
    574                         // { 
    575                         // all_fields.set(all_fields.indexOf(f), f); 
    576                         // } 
     574                        { 
     575                                all_fields.set(all_fields.indexOf(f), f); 
     576                        } 
    577577                } 
    578578 
     
    842842                        logger.debug("testing: " + field.getName()); 
    843843 
    844                         if (name.toLowerCase().equals(field.getName().toLowerCase())) 
     844                        if (name.equalsIgnoreCase(field.getName())) 
    845845                        { 
    846846                                return field; 
     
    11631163                return this.getKey(0).getFields().get(0); 
    11641164        } 
     1165 
     1166        public void setParents(String[] parents) 
     1167        { 
     1168                Vector<String> result = new Vector<String>(); 
     1169                for (String parent : parents) 
     1170                        result.add(parent); 
     1171                this.setParents(result); 
     1172        } 
     1173 
     1174        public void addKey(String[] fieldnames, boolean subclass, String description) throws MolgenisModelException 
     1175        { 
     1176                Vector<Field> fields = new Vector<Field>(); 
     1177                for (String field : fieldnames) 
     1178                { 
     1179                        fields.add(this.getAllField(field)); 
     1180                } 
     1181                this.addKey(fields, subclass, description); 
     1182        } 
    11651183} 
  • molgenis3_3/src/org/molgenis/model/syntax/Model.java

    r1975 r2006  
    225225 
    226226        /** 
    227          * @throws MolgenisModelException  
     227         * @throws MolgenisModelException 
    228228         *  
    229229         */ 
     
    232232                for (DBSchema element : database.getChildren()) 
    233233                { 
    234                         if (element.getClass().equals(Entity.class) && element.getName().toLowerCase().equals(name.toLowerCase())) 
     234                        if (element.getClass().equals(Entity.class) && element.getName().equalsIgnoreCase(name)) 
    235235                        { 
    236236                                return (Entity) element; 
     
    238238                } 
    239239                // throw error if cannot find it (don't return null). 
    240                 //throw new MolgenisLanguageException("couldn't find entity '"+name+"'"); 
     240                // throw new 
     241                // MolgenisLanguageException("couldn't find entity '"+name+"'"); 
    241242                // throw new RuntimeException(); 
    242243                // System.exit(1); 
     
    307308         *  
    308309         */ 
    309 //      public static void createSystemTables(Model model) 
    310 //      { 
    311 //              Field field; 
    312 //              Entity entity; 
    313 // 
    314 //              try 
    315 //              { 
    316 //                      FileMetaInfo fileinfo = model.getFileInfo(); 
    317 //                      UserMetaInfo userinfo = model.getUserInfo(); 
    318 //                      RoleMetaInfo roleinfo = model.getRoleInfo(); 
    319 //                      EntityMetaInfo entityinfo = model.getEntityInfo(); 
    320 //                      ScreenMetaInfo screeninfo = model.getScreenInfo(); 
    321 // 
    322 //                      // files 
    323 //                      entity = new Entity(fileinfo.getEntity(), "", model.getDatabase(), true); 
    324 // 
    325 //                      field = new Field(entity, Field.Type.INT, fileinfo.getColumnNameID(), "", true, false, false, ""); 
    326 //                      entity.addField(field); 
    327 //                      entity.addKey(field,null); 
    328 // 
    329 //                      // Vector<Field> constraint_name = new Vector<Field>(); 
    330 // 
    331 //                      field = new Field(entity, Field.Type.STRING, fileinfo.getColumnNameFilename(), "", false, true, false, ""); 
    332 //                      field.setVarCharLength(1024); 
    333 //                      entity.addField(field); 
    334 //                      // constraint_name.add(field); 
    335 // 
    336 //                      field = new Field(entity, Field.Type.STRING, fileinfo.getColumnNameEntityOwner(), "", false, true, false, 
    337 //                                      ""); 
    338 //                      field.setVarCharLength(1024); 
    339 //                      entity.addField(field); 
    340 //                      // constraint_name.add(field); 
    341 // 
    342 //                      // entity.addKey(constraint_name); 
    343 // 
    344 //                      field = new Field(entity, Field.Type.STRING, fileinfo.getColumnNameLocalFileName(), "", false, true, false, 
    345 //                                      ""); 
    346 //                      field.setVarCharLength(1024); 
    347 //                      entity.addField(field); 
    348 // 
    349 //                      field = new Field(entity, Field.Type.STRING, fileinfo.getColumnNameMime(), "", false, true, false, ""); 
    350 //                      field.setVarCharLength(255); 
    351 //                      entity.addField(field); 
    352 // 
    353 //                      // users 
    354 //                      entity = new Entity(userinfo.getEntity(), "", model.getDatabase(), true); 
    355 // 
    356 //                      field = new Field(entity, Field.Type.INT, userinfo.getColumnNameID(), "", true, false, false, ""); 
    357 //                      entity.addField(field); 
    358 //                      entity.addKey(field); 
    359 // 
    360 //                      field = new Field(entity, Field.Type.STRING, userinfo.getColumnNameInitials(), "", false, true, false, ""); 
    361 //                      field.setVarCharLength(32); 
    362 //                      entity.addField(field); 
    363 // 
    364 //                      field = new Field(entity, Field.Type.STRING, userinfo.getColumnNameLastName(), "", false, true, false, ""); 
    365 //                      field.setVarCharLength(32); 
    366 //                      entity.addField(field); 
    367 // 
    368 //                      // name can only be unique if not null! 
    369 //                      field = new Field(entity, Field.Type.STRING, userinfo.getColumnNameUsername(), "", false, false, false, ""); 
    370 //                      field.setVarCharLength(32); 
    371 //                      entity.addField(field); 
    372 //                      entity.addKey(field); // make the username unique 
    373 // 
    374 //                      field = new Field(entity, Field.Type.STRING, userinfo.getColumnNamePassword(), "", false, true, false, ""); 
    375 //                      field.setVarCharLength(32); 
    376 //                      entity.addField(field); 
    377 // 
    378 //                      field = new Field(entity, Field.Type.XREF_MULTIPLE, userinfo.getColumnNameRoles(), "", false, true, false, 
    379 //                                      ""); 
    380 //                      field.setXRefVariables(roleinfo.getEntity(), roleinfo.getColumnNameID(), roleinfo.getColumnNameRoleName()); 
    381 //                      // field.setXRefLinkTable(""); 
    382 //                      entity.addField(field); 
    383 // 
    384 //                      // roles 
    385 //                      entity = new Entity(roleinfo.getEntity(), "", model.getDatabase(), true); 
    386 // 
    387 //                      field = new Field(entity, Field.Type.INT, roleinfo.getColumnNameID(), "", true, false, false, ""); 
    388 //                      entity.addField(field); 
    389 //                      entity.addKey(field); 
    390 // 
    391 //                      // name can only be unique if not null! 
    392 //                      field = new Field(entity, Field.Type.STRING, roleinfo.getColumnNameRoleName(), "", false, false, false, ""); 
    393 //                      field.setVarCharLength(255); 
    394 //                      entity.addField(field); 
    395 //                      entity.addKey(field); 
    396 // 
    397 //                      // entities 
    398 //                      entity = new Entity(entityinfo.getEntity(), "", model.getDatabase(), true); 
    399 // 
    400 //                      field = new Field(entity, Field.Type.INT, entityinfo.getColumnNameID(), "", true, false, false, ""); 
    401 //                      entity.addField(field); 
    402 //                      entity.addKey(field); 
    403 // 
    404 //                      // name can only be unique if not null! 
    405 //                      field = new Field(entity, Field.Type.STRING, entityinfo.getColumnNameName(), "", false, false, false, ""); 
    406 //                      field.setVarCharLength(255); 
    407 //                      entity.addField(field); 
    408 //                      entity.addKey(field); 
    409 // 
    410 //                      field = new Field(entity, Field.Type.XREF_MULTIPLE, entityinfo.getColumnNameRoles(), "", false, true, 
    411 //                                      false, ""); 
    412 //                      field.setXRefVariables(roleinfo.getEntity(), roleinfo.getColumnNameID(), roleinfo.getColumnNameRoleName()); 
    413 //                      // field.setXRefLinkTable(""); 
    414 //                      entity.addField(field); 
    415 // 
    416 //                      // screens 
    417 //                      entity = new Entity(screeninfo.getEntity(), "", model.getDatabase(), true); 
    418 // 
    419 //                      field = new Field(entity, Field.Type.INT, screeninfo.getColumnNameID(), "", true, false, false, ""); 
    420 //                      entity.addField(field); 
    421 //                      entity.addKey(field); 
    422 // 
    423 //                      field = new Field(entity, Field.Type.STRING, screeninfo.getColumnNameName(), "", false, true, false, ""); 
    424 //                      field.setVarCharLength(255); 
    425 //                      entity.addField(field); 
    426 //                      // entity.addKey(field); 
    427 // 
    428 //                      field = new Field(entity, Field.Type.XREF_MULTIPLE, screeninfo.getColumnNameRoles(), "", false, true, 
    429 //                                      false, ""); 
    430 //                      field.setXRefVariables(roleinfo.getEntity(), roleinfo.getColumnNameID(), roleinfo.getColumnNameRoleName()); 
    431 //                      // field.setXRefLinkTable(""); 
    432 //                      entity.addField(field); 
    433 //              } 
    434 //              catch (Exception e) 
    435 //              { 
    436 //              } 
    437 //      } 
    438  
     310        // public static void createSystemTables(Model model) 
     311        // { 
     312        // Field field; 
     313        // Entity entity; 
     314        // 
     315        // try 
     316        // { 
     317        // FileMetaInfo fileinfo = model.getFileInfo(); 
     318        // UserMetaInfo userinfo = model.getUserInfo(); 
     319        // RoleMetaInfo roleinfo = model.getRoleInfo(); 
     320        // EntityMetaInfo entityinfo = model.getEntityInfo(); 
     321        // ScreenMetaInfo screeninfo = model.getScreenInfo(); 
     322        // 
     323        // // files 
     324        // entity = new Entity(fileinfo.getEntity(), "", model.getDatabase(), true); 
     325        // 
     326        // field = new Field(entity, Field.Type.INT, fileinfo.getColumnNameID(), "", 
     327        // true, false, false, ""); 
     328        // entity.addField(field); 
     329        // entity.addKey(field,null); 
     330        // 
     331        // // Vector<Field> constraint_name = new Vector<Field>(); 
     332        // 
     333        // field = new Field(entity, Field.Type.STRING, 
     334        // fileinfo.getColumnNameFilename(), "", false, true, false, ""); 
     335        // field.setVarCharLength(1024); 
     336        // entity.addField(field); 
     337        // // constraint_name.add(field); 
     338        // 
     339        // field = new Field(entity, Field.Type.STRING, 
     340        // fileinfo.getColumnNameEntityOwner(), "", false, true, false, 
     341        // ""); 
     342        // field.setVarCharLength(1024); 
     343        // entity.addField(field); 
     344        // // constraint_name.add(field); 
     345        // 
     346        // // entity.addKey(constraint_name); 
     347        // 
     348        // field = new Field(entity, Field.Type.STRING, 
     349        // fileinfo.getColumnNameLocalFileName(), "", false, true, false, 
     350        // ""); 
     351        // field.setVarCharLength(1024); 
     352        // entity.addField(field); 
     353        // 
     354        // field = new Field(entity, Field.Type.STRING, 
     355        // fileinfo.getColumnNameMime(), "", false, true, false, ""); 
     356        // field.setVarCharLength(255); 
     357        // entity.addField(field); 
     358        // 
     359        // // users 
     360        // entity = new Entity(userinfo.getEntity(), "", model.getDatabase(), true); 
     361        // 
     362        // field = new Field(entity, Field.Type.INT, userinfo.getColumnNameID(), "", 
     363        // true, false, false, ""); 
     364        // entity.addField(field); 
     365        // entity.addKey(field); 
     366        // 
     367        // field = new Field(entity, Field.Type.STRING, 
     368        // userinfo.getColumnNameInitials(), "", false, true, false, ""); 
     369        // field.setVarCharLength(32); 
     370        // entity.addField(field); 
     371        // 
     372        // field = new Field(entity, Field.Type.STRING, 
     373        // userinfo.getColumnNameLastName(), "", false, true, false, ""); 
     374        // field.setVarCharLength(32); 
     375        // entity.addField(field); 
     376        // 
     377        // // name can only be unique if not null! 
     378        // field = new Field(entity, Field.Type.STRING, 
     379        // userinfo.getColumnNameUsername(), "", false, false, false, ""); 
     380        // field.setVarCharLength(32); 
     381        // entity.addField(field); 
     382        // entity.addKey(field); // make the username unique 
     383        // 
     384        // field = new Field(entity, Field.Type.STRING, 
     385        // userinfo.getColumnNamePassword(), "", false, true, false, ""); 
     386        // field.setVarCharLength(32); 
     387        // entity.addField(field); 
     388        // 
     389        // field = new Field(entity, Field.Type.XREF_MULTIPLE, 
     390        // userinfo.getColumnNameRoles(), "", false, true, false, 
     391        // ""); 
     392        // field.setXRefVariables(roleinfo.getEntity(), roleinfo.getColumnNameID(), 
     393        // roleinfo.getColumnNameRoleName()); 
     394        // // field.setXRefLinkTable(""); 
     395        // entity.addField(field); 
     396        // 
     397        // // roles 
     398        // entity = new Entity(roleinfo.getEntity(), "", model.getDatabase(), true); 
     399        // 
     400        // field = new Field(entity, Field.Type.INT, roleinfo.getColumnNameID(), "", 
     401        // true, false, false, ""); 
     402        // entity.addField(field); 
     403        // entity.addKey(field); 
     404        // 
     405        // // name can only be unique if not null! 
     406        // field = new Field(entity, Field.Type.STRING, 
     407        // roleinfo.getColumnNameRoleName(), "", false, false, false, ""); 
     408        // field.setVarCharLength(255); 
     409        // entity.addField(field); 
     410        // entity.addKey(field); 
     411        // 
     412        // // entities 
     413        // entity = new Entity(entityinfo.getEntity(), "", model.getDatabase(), 
     414        // true); 
     415        // 
     416        // field = new Field(entity, Field.Type.INT, entityinfo.getColumnNameID(), 
     417        // "", true, false, false, ""); 
     418        // entity.addField(field); 
     419        // entity.addKey(field); 
     420        // 
     421        // // name can only be unique if not null! 
     422        // field = new Field(entity, Field.Type.STRING, 
     423        // entityinfo.getColumnNameName(), "", false, false, false, ""); 
     424        // field.setVarCharLength(255); 
     425        // entity.addField(field); 
     426        // entity.addKey(field); 
     427        // 
     428        // field = new Field(entity, Field.Type.XREF_MULTIPLE, 
     429        // entityinfo.getColumnNameRoles(), "", false, true, 
     430        // false, ""); 
     431        // field.setXRefVariables(roleinfo.getEntity(), roleinfo.getColumnNameID(), 
     432        // roleinfo.getColumnNameRoleName()); 
     433        // // field.setXRefLinkTable(""); 
     434        // entity.addField(field); 
     435        // 
     436        // // screens 
     437        // entity = new Entity(screeninfo.getEntity(), "", model.getDatabase(), 
     438        // true); 
     439        // 
     440        // field = new Field(entity, Field.Type.INT, screeninfo.getColumnNameID(), 
     441        // "", true, false, false, ""); 
     442        // entity.addField(field); 
     443        // entity.addKey(field); 
     444        // 
     445        // field = new Field(entity, Field.Type.STRING, 
     446        // screeninfo.getColumnNameName(), "", false, true, false, ""); 
     447        // field.setVarCharLength(255); 
     448        // entity.addField(field); 
     449        // // entity.addKey(field); 
     450        // 
     451        // field = new Field(entity, Field.Type.XREF_MULTIPLE, 
     452        // screeninfo.getColumnNameRoles(), "", false, true, 
     453        // false, ""); 
     454        // field.setXRefVariables(roleinfo.getEntity(), roleinfo.getColumnNameID(), 
     455        // roleinfo.getColumnNameRoleName()); 
     456        // // field.setXRefLinkTable(""); 
     457        // entity.addField(field); 
     458        // } 
     459        // catch (Exception e) 
     460        // { 
     461        // } 
     462        // } 
    439463        public String toString() 
    440464        { 
     
    495519 
    496520                // get entity 
     521                Field result = null; 
    497522                if (entity != null) 
    498523                { 
     
    500525                        try 
    501526                        { 
    502                                 //todo: make case insensitive? 
     527                                // todo: make case insensitive? 
    503528                                em = this.getEntity(entity); 
    504529                        } 
     
    509534 
    510535                        // get field 
    511                         return em.getAllField(field); 
     536                        result = em.getAllField(field); 
    512537                } 
    513538                else 
    514539                { 
    515540                        int count = 0; 
    516                         Field result = null; 
    517541                        for (Entity em : getEntities()) 
    518542                        { 
    519543                                for (Field fm : em.getAllFields()) 
    520544                                { 
    521                                         if (fm.getName().equals(field)) 
     545                                        if (fm.getName().equalsIgnoreCase(field)) 
    522546                                        { 
    523547                                                result = fm; 
     
    528552                                } 
    529553                        } 
    530                         if (result != null) 
    531                         { 
    532                                 //logger.debug("guessed entity for field '"+field+"': '"+result.getEntityMetaData().getName()+"'"); 
    533                                 return result; 
    534                         } 
     554                } 
     555                if (result != null) 
     556                { 
     557                        return result; 
     558                } 
     559                else 
     560                { 
    535561                        throw new DatabaseException("field with name '" + f + " is unknown: "); 
    536562                } 
Note: See TracChangeset for help on using the changeset viewer.