baseconfigintrospector.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,100 行 · 第 1/5 页

JAVA
2,100
字号
    if (typeConfig != null) {      String access = typeConfig.getAccess();      if (access != null)        return access.equals("FIELD");      Class parentClass = type.getSuperclass();      if (parentClass == null)        return false;      else {        getInternalEntityConfig(parentClass, _annotationCfg);        EntityConfig superEntityConfig = _annotationCfg.getEntityConfig();        if (superEntityConfig == null)          return false;        return isField(parentClass, superEntityConfig, false);      }    }    for (Field field : type.getDeclaredFields()) {      for (Class annType : _annTypes) {	if (field.getAnnotation(annType) != null) {	  return true;	}      }    }    return isField(type.getSuperclass(), null, false);  }  private IdField introspectId(AmberPersistenceUnit persistenceUnit,                               EntityType entityType,                               AccessibleObject field,                               String fieldName,                               Class fieldType,                               IdConfig idConfig)    throws ConfigException, SQLException  {    javax.persistence.Id id = field.getAnnotation(javax.persistence.Id.class);    Column column = field.getAnnotation(javax.persistence.Column.class);    ColumnConfig columnConfig = null;    GeneratedValueConfig generatedValueConfig = null;    if (idConfig != null) {      columnConfig = idConfig.getColumn();      generatedValueConfig = idConfig.getGeneratedValue();    }    GeneratedValue gen = field.getAnnotation(GeneratedValue.class);    AmberType amberType = persistenceUnit.createType(fieldType);    KeyPropertyField idField;    AmberColumn keyColumn = null;    keyColumn = createColumn(entityType,			     field,			     fieldName,			     column,			     amberType,			     columnConfig);    if (entityType.getTable() != null) {      idField = new KeyPropertyField(entityType, fieldName, keyColumn);    }    else {      idField = new KeyPropertyField(entityType, fieldName, keyColumn);      return idField;    }    if (gen == null) {    }    else {      JdbcMetaData metaData = null;      /* XXX: validation needs to occur later      try {        metaData = persistenceUnit.getMetaData();      } catch (ConfigException e) {	throw e;      } catch (Exception e) {        throw new ConfigException(L.l("Unable to get meta data for database. Meta data is needed for generated values."), e);      }      */      if (GenerationType.IDENTITY.equals(gen.strategy())) {	/* XXX: validation later        if (! metaData.supportsIdentity())          throw new ConfigException(L.l("'{0}' does not support identity.",                                        metaData.getDatabaseName()));	*/        keyColumn.setGeneratorType("identity");        idField.setGenerator("identity");      }      else if (GenerationType.SEQUENCE.equals(gen.strategy())) {	/* XXX: validation later        if (! metaData.supportsSequences())          throw new ConfigException(L.l("'{0}' does not support sequence.",                                        metaData.getDatabaseName()));	*/        addSequenceIdGenerator(persistenceUnit, idField, gen);      }      else if (GenerationType.TABLE.equals(gen.strategy())) {        addTableIdGenerator(persistenceUnit, idField, id);      }      else if (GenerationType.AUTO.equals(gen.strategy())) {        keyColumn.setGeneratorType("auto");        idField.setGenerator("auto");	/* XXX: validation later        if (metaData.supportsIdentity()) {          keyColumn.setGeneratorType("identity");          idField.setGenerator("identity");        }        else if (metaData.supportsSequences()) {          addSequenceIdGenerator(persistenceUnit, idField, gen);        }        else {          addTableIdGenerator(persistenceUnit, idField, id);        }	*/      }    }    return idField;  }  private IdField introspectEmbeddedId(AmberPersistenceUnit persistenceUnit,                                       EntityType ownerType,                                       AccessibleObject field,                                       String fieldName,                                       Class fieldType)    throws ConfigException, SQLException  {    IdField idField;    EmbeddableType embeddableType      = (EmbeddableType) _configManager.introspect(fieldType);    if (embeddableType == null)      throw new IllegalStateException("" + fieldType + " is an unsupported embeddable type");    idField = new EmbeddedIdField(ownerType, embeddableType, fieldName);    return idField;  }  void addSequenceIdGenerator(AmberPersistenceUnit persistenceUnit,                              KeyPropertyField idField,                              GeneratedValue genAnn)    throws ConfigException  {    idField.setGenerator("sequence");    idField.getColumn().setGeneratorType("sequence");    String name = genAnn.generator();    if (name == null || "".equals(name))      name = idField.getEntitySourceType().getTable().getName() + "_cseq";    IdGenerator gen = persistenceUnit.createSequenceGenerator(name, 1);    idField.getEntitySourceType().setGenerator(idField.getName(), gen);  }  void addTableIdGenerator(AmberPersistenceUnit persistenceUnit,                           KeyPropertyField idField,                           javax.persistence.Id idAnn)    throws ConfigException  {    idField.setGenerator("table");    idField.getColumn().setGeneratorType("table");    String name = null;// XXX: idAnn.name();    if (name == null || "".equals(name))      name = "caucho";    IdGenerator gen = persistenceUnit.getTableGenerator(name);    if (gen == null) {      String genName = "GEN_TABLE";      GeneratorTableType genTable;      genTable = persistenceUnit.createGeneratorTable(genName);      gen = genTable.createGenerator(name);      // jpa/0g60      genTable.init();      persistenceUnit.putTableGenerator(name, gen);    }    idField.getEntitySourceType().setGenerator(idField.getName(), gen);  }  /**   * Links a secondary table.   */  void linkSecondaryTable(AmberTable primaryTable,                          AmberTable secondaryTable,                          PrimaryKeyJoinColumn []joinColumnsAnn)    throws ConfigException  {    ArrayList<ForeignColumn> linkColumns = new ArrayList<ForeignColumn>();    for (AmberColumn column : primaryTable.getIdColumns()) {      ForeignColumn linkColumn;      PrimaryKeyJoinColumn joinAnn	= getJoinColumn(joinColumnsAnn, column.getName());      String name;      if (joinAnn == null)        name = column.getName();      else        name = joinAnn.name();      linkColumn = secondaryTable.createForeignColumn(name, column);      linkColumn.setPrimaryKey(true);      secondaryTable.addIdColumn(linkColumn);      linkColumns.add(linkColumn);    }    LinkColumns link = new LinkColumns(secondaryTable,                                       primaryTable,                                       linkColumns);    link.setSourceCascadeDelete(true);    secondaryTable.setDependentIdLink(link);  }  /**   * Links a secondary table.   */  void linkInheritanceTable(AmberTable primaryTable,                            AmberTable secondaryTable,                            PrimaryKeyJoinColumn joinAnn,                            PrimaryKeyJoinColumnConfig pkJoinColumnCfg)    throws ConfigException  {    PrimaryKeyJoinColumn joinAnns[] = null;    if (joinAnn != null)      joinAnns = new PrimaryKeyJoinColumn[] { joinAnn };    linkInheritanceTable(primaryTable,                         secondaryTable,                         joinAnns,                         pkJoinColumnCfg);  }  /**   * Links a secondary table.   */  void linkInheritanceTable(AmberTable primaryTable,                            AmberTable secondaryTable,                            PrimaryKeyJoinColumn []joinColumnsAnn,                            PrimaryKeyJoinColumnConfig pkJoinColumnCfg)    throws ConfigException  {    ArrayList<ForeignColumn> linkColumns = new ArrayList<ForeignColumn>();    for (AmberColumn column : primaryTable.getIdColumns()) {      ForeignColumn linkColumn;      String name;      if (joinColumnsAnn == null) {        if (pkJoinColumnCfg == null)          name = column.getName();        else          name = pkJoinColumnCfg.getName();      }      else {        PrimaryKeyJoinColumn join;        join = getJoinColumn(joinColumnsAnn, column.getName());        if (join == null)          name = column.getName();        else          name = join.name();      }      linkColumn = secondaryTable.createForeignColumn(name, column);      linkColumn.setPrimaryKey(true);      secondaryTable.addIdColumn(linkColumn);      linkColumns.add(linkColumn);    }    LinkColumns link = new LinkColumns(secondaryTable,                                       primaryTable,                                       linkColumns);    link.setSourceCascadeDelete(true);    secondaryTable.setDependentIdLink(link);    // jpa/0l48    //    link = new LinkColumns(primaryTable,    //                           secondaryTable,    //                           linkColumns);    //    //    link.setSourceCascadeDelete(true);    //    //    primaryTable.setDependentIdLink(link);  }  /**   * Introspects the methods.   */  void introspectMethods(AmberPersistenceUnit persistenceUnit,                         BeanType entityType,                         BeanType parentType,                         Class type,                         AbstractEnhancedConfig typeConfig)    throws ConfigException  {    for (Method method : type.getDeclaredMethods()) {      String methodName = method.getName();      Class []paramTypes = method.getParameterTypes();      if (method.getDeclaringClass().equals(Object.class))        continue;      // jpa/0r38      // Callbacks are introspected in the main introspect() block.      // introspectCallbacks(entityType, method);      String propName;      if (paramTypes.length != 0) {        validateNonGetter(method);        continue;      }      else if (methodName.startsWith("get")) {        propName = methodName.substring(3);      }      else if (methodName.startsWith("is")	       && (method.getReturnType().equals(boolean.class)		   || method.getReturnType().equals(Boolean.class))) {        propName = methodName.substring(2);      }      else {        validateNonGetter(method);        continue;      }      getInternalVersionConfig(type, method, propName, _annotationCfg);      Annotation versionAnn = _annotationCfg.getAnnotation();      VersionConfig versionConfig = _annotationCfg.getVersionConfig();      if (! _annotationCfg.isNull()) {        validateNonGetter(method);      }      else {        Method setter = null;                try {          setter = getMethod(type,			     "set" + propName,			     new Class[] { method.getReturnType() });        } catch (Exception e) {          log.log(Level.FINEST, e.toString(), e);        }                if (Modifier.isPrivate(method.getModifiers())            || setter == null            || Modifier.isPrivate(setter.getModifiers())) {          Annotation ann = isAnnotatedMethod(method);          if (ann == null) {            if (setter != null)              ann = isAnnotatedMethod(setter);          }          else if (ann instanceof Transient)            continue;          if (ann != null) {            throw error(method, L.l("'{0}' is not a valid annotation for {1}.  Only public persistent property getters with matching setters may have property annotations.",                                          ann.getClass(), getFullName(method)));          }          continue;        }        // ejb/0g03 for private        if (Modifier.isStatic(method.getModifiers())) { // || ! method.isPublic()) {          validateNonGetter(method);          continue;        }      }      String fieldName = toFieldName(propName);      if (containsFieldOrCompletion(parentType, fieldName))        continue;      Class fieldType = method.getReturnType();      introspectField(persistenceUnit, entityType, method,                      fieldName, fieldType, typeConfig);    }  }  private Method getMethod(Class cl, String name, Class []param)  {    if (cl == null)      return null;

⌨️ 快捷键说明

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