protected void generateDeriveKeyMethod(SourcePrinter srcWriter) { srcWriter.println( "protected " + getKeyTypeName() + " getKey(" + getTargetObjectClassName() + " object){"); srcWriter.print("boolean hasKey = "); boolean first = true; for (String k : keyPath) { if (!first) { srcWriter.print(" || "); } String getterMethod = JClassUtils.getGetterMethod(k, targetObjectType); srcWriter.print("object." + getterMethod + "() != null"); first = false; } srcWriter.println(";"); srcWriter.println("if (hasKey){"); srcWriter.print(getKeyTypeName() + " key"); if (hasCompositeKey()) { srcWriter.println(" = new Object[" + keyPath.length + "];"); int i = 0; for (String k : keyPath) { String getterMethod = JClassUtils.getGetterMethod(k, targetObjectType); srcWriter.print("key [" + i + "] = object." + getterMethod + "();"); i++; } } else { srcWriter.println( " = object." + JClassUtils.getGetterMethod(keyPath[0], targetObjectType) + "();"); } srcWriter.println("return key;"); if (autoIncrement) { if (!getKeyTypeName().equals("Integer")) { throw new CruxGeneratorException("Auto increment keys can only be used on integer keys"); } srcWriter.println("} else {"); srcWriter.println("return null;"); } else { srcWriter.println("} else {"); srcWriter.println("reportError(db.messages.objectStoreDeriveKeyError(name));"); srcWriter.println("return null;"); } srcWriter.println("}"); srcWriter.println("}"); srcWriter.println(); }
/** * @param dataClass * @return */ private String[] extractIdentifiers(JClassType dataClass) { List<String> ids = new ArrayList<String>(); JField[] fields = JClassUtils.getDeclaredFields(dataClass); for (JField field : fields) { if (field.getAnnotation(DataObjectIdentifier.class) != null) { if (field.isPublic()) { ids.add(field.getName()); } else { ids.add(JClassUtils.getGetterMethod(field.getName(), dataClass) + "()"); } } } return ids.toArray(new String[ids.size()]); }