コード例 #1
0
 private void setupDefaultConverters() throws XavaException {
   Iterator it = propertyMappings.values().iterator();
   while (it.hasNext()) {
     PropertyMapping propertyMapping = (PropertyMapping) it.next();
     propertyMapping.setDefaultConverter();
   }
 }
コード例 #2
0
  public String getQualifiedColumn(String modelProperty) throws XavaException {
    PropertyMapping propertyMapping = (PropertyMapping) propertyMappings.get(modelProperty);
    if (propertyMapping != null && propertyMapping.hasFormula()) return getColumn(modelProperty);

    String tableColumn = getTableColumn(modelProperty, true);
    if (Is.emptyString(tableColumn)) return "'" + modelProperty + "'";
    if (referencePropertyWithFormula) {
      referencePropertyWithFormula = false;
      return tableColumn;
    }
    // for calculated fields or created by multiple converter

    if (modelProperty.indexOf('.') >= 0) {
      if (tableColumn.indexOf('.') < 0) return tableColumn;
      String reference = modelProperty.substring(0, modelProperty.lastIndexOf('.'));
      if (tableColumn.startsWith(getTableToQualifyColumn() + ".")) {
        String member = modelProperty.substring(modelProperty.lastIndexOf('.') + 1);
        if (getMetaModel().getMetaReference(reference).getMetaModelReferenced().isKey(member))
          return tableColumn;
      }

      // The next code uses the alias of the table instead of its name. In order to
      // support multiple references to the same model
      if (reference.indexOf('.') >= 0) {
        if (getMetaModel().getMetaProperty(modelProperty).isKey()) {
          reference = reference.substring(0, reference.lastIndexOf('.'));
        }
        reference = reference.replaceAll("\\.", "_");
      }
      return "T_" + reference + tableColumn.substring(tableColumn.lastIndexOf('.'));
    } else {
      return getTableToQualifyColumn() + "." + tableColumn;
    }
  }
コード例 #3
0
 public void addPropertyMapping(PropertyMapping propertyMapping) throws XavaException {
   propertyMappings.put(propertyMapping.getProperty(), propertyMapping);
   modelProperties.add(propertyMapping.getProperty());
   // To keep order
   tableColumns.add(propertyMapping.getColumn());
   if (propertyMapping.hasFormula() && !getMetaModel().isAnnotatedEJB3()) {
     propertyMapping.getMetaProperty().setReadOnly(true);
   }
 }
コード例 #4
0
  /** @return Not null */
  public ReferenceMapping getReferenceMapping(String name)
      throws XavaException, ElementNotFoundException {

    ReferenceMapping r =
        referenceMappings == null ? null : (ReferenceMapping) referenceMappings.get(name);
    if (r == null) {
      throw new ElementNotFoundException("reference_mapping_not_found", name, getModelName());
    }
    return r;
  }
コード例 #5
0
 private PropertyMapping getMappingForColumn(String column) throws XavaException {
   if (propertyMappings == null) {
     throw new ElementNotFoundException("mapping_not_found_no_property_mappings", column);
   }
   Iterator it = propertyMappings.values().iterator();
   while (it.hasNext()) {
     PropertyMapping propertyMapping = (PropertyMapping) it.next();
     if (propertyMapping.getColumn().equalsIgnoreCase(column)) {
       return propertyMapping;
     }
   }
   throw new ElementNotFoundException("mapping_for_column_not_found", column);
 }
コード例 #6
0
 /** @throws XavaException If it does not have a overlapped property, or any other problem. */
 public String getOverlappingPropertyForReference(String reference, String propertyOfReference)
     throws XavaException {
   String column =
       getReferenceMapping(reference).getColumnForReferencedModelProperty(propertyOfReference);
   if (propertyMappings == null) {
     throw new XavaException("reference_property_not_overlapped", propertyOfReference, reference);
   }
   Iterator it = propertyMappings.values().iterator();
   while (it.hasNext()) {
     PropertyMapping mapping = (PropertyMapping) it.next();
     if (column.equalsIgnoreCase(mapping.getColumn())) return mapping.getProperty();
   }
   throw new XavaException("reference_property_not_overlapped", propertyOfReference, reference);
 }
コード例 #7
0
  /** @return Not null */
  public PropertyMapping getPropertyMapping(String name)
      throws XavaException, ElementNotFoundException {
    int i = name.indexOf('.');
    if (i >= 0) {
      String rName = name.substring(0, i);
      String pName = name.substring(i + 1);

      if (isReferenceNameInReferenceMappings(rName)) {
        return getReferenceMapping(rName).getReferencedMapping().getPropertyMapping(pName);
      } else {
        // by embedded references: address.city -> address_city
        return getPropertyMapping(name.replace(".", "_"));
      }
    }

    PropertyMapping p =
        propertyMappings == null ? null : (PropertyMapping) propertyMappings.get(name);
    if (p == null) {
      throw new ElementNotFoundException("property_mapping_not_found", name, getModelName());
    }
    return p;
  }
コード例 #8
0
 private Collection getReferenceMappings() {
   return referenceMappings == null ? Collections.EMPTY_LIST : referenceMappings.values();
 }
コード例 #9
0
 private Collection getPropertyMappings() {
   return propertyMappings.values();
 }
コード例 #10
0
 public boolean hasReferenceMapping(MetaReference metaReference) {
   if (referenceMappings == null) return false;
   return referenceMappings.containsKey(metaReference.getName());
 }
コード例 #11
0
 public boolean hasPropertyMapping(String memberName) {
   return propertyMappings.containsKey(memberName);
 }
コード例 #12
0
  private String getTableColumn(String modelProperty, boolean qualifyReferenceMappingColumn)
      throws XavaException {

    PropertyMapping propertyMapping = (PropertyMapping) propertyMappings.get(modelProperty);
    if (propertyMapping == null) {
      int idx = modelProperty.indexOf('.');
      if (idx >= 0) {
        String referenceName = modelProperty.substring(0, idx);
        String propertyName = modelProperty.substring(idx + 1);
        if (getMetaModel().getMetaReference(referenceName).isAggregate()
            && !Strings.firstUpper(referenceName).equals(getMetaModel().getContainerModelName())) {
          propertyMapping =
              (PropertyMapping) propertyMappings.get(referenceName + "_" + propertyName);
          if (propertyMapping == null) {
            int idx2 = propertyName.indexOf('.');
            if (idx2 >= 0) {
              String referenceName2 = propertyName.substring(0, idx2);
              String propertyName2 = propertyName.substring(idx2 + 1);
              return getTableColumn(
                  referenceName + "_" + referenceName2 + "." + propertyName2,
                  qualifyReferenceMappingColumn);
            } else {
              throw new ElementNotFoundException(
                  "property_mapping_not_found", referenceName + "_" + propertyName, getModelName());
            }
          }
          return propertyMapping.getColumn();
        }
        ReferenceMapping referenceMapping = getReferenceMapping(referenceName);

        if (referenceMapping.hasColumnForReferencedModelProperty(propertyName)) {
          if (qualifyReferenceMappingColumn) {
            return getTableToQualifyColumn()
                + "."
                + referenceMapping.getColumnForReferencedModelProperty(propertyName);
          } else {
            return referenceMapping.getColumnForReferencedModelProperty(propertyName);
          }
        } else {
          ModelMapping referencedMapping = referenceMapping.getReferencedMapping();

          String tableName = referencedMapping.getTableToQualifyColumn();
          boolean secondLevel = propertyName.indexOf('.') >= 0;
          String columnName = referencedMapping.getTableColumn(propertyName, secondLevel);
          boolean hasFormula = referencedMapping.getPropertyMapping(propertyName).hasFormula();

          if (qualifyReferenceMappingColumn && !secondLevel && !hasFormula) {
            return tableName + "." + columnName;
          } else if (hasFormula) {
            String formula = referencedMapping.getPropertyMapping(propertyName).getFormula();
            referencePropertyWithFormula = true;
            return qualifyFormulaWithReferenceName(
                formula, referencedMapping.getModelName(), modelProperty);
          } else {
            return columnName;
          }
        }
      }
      throw new ElementNotFoundException(
          "property_mapping_not_found", modelProperty, getModelName());
    }
    if (propertyMapping.hasFormula()) return propertyMapping.getFormula();
    return propertyMapping.getColumn();
  }
コード例 #13
0
 public void addReferenceMapping(ReferenceMapping referenceMapping) throws XavaException {
   if (referenceMappings == null) referenceMappings = new HashMap();
   referenceMappings.put(referenceMapping.getReference(), referenceMapping);
   referenceMapping.setContainer(this);
 }