Example #1
0
  /**
   * This is the main method of this class. It's easy to generate a Resource object, and then the
   * Resource can be used to generate the EMEntity
   *
   * @return
   */
  public EMEntity toEMEntity(FieldTypeChecker fieldTypeChecker) {
    EMEntity entity = null;
    /*
     * If this is an enqlist, use the application name as it could be sometimes "-LIST" and sometimes not.
     */
    if (this.type == RESOURCE_TYPE.enqlist) {
      entity = new EMEntity(type + EMUtils.camelCaseName(this.underlyingApplicationName));
    } else {
      entity = new EMEntity(type + EMUtils.camelCaseName(t24name));
    }
    entity.setT24Name(t24name);
    for (ResourceField field : fields) {
      List<EMProperty> properties = entity.getProperties();
      // Create the property
      EMProperty property = new EMProperty(field.getIrisName());
      property.setT24Name(field.getT24name());
      if (field.isMandatory()) {
        property.addVocabularyTerm(new EMTerm(EMTermType.REQ_TERM, "true"));
      }
      if (field.isPrimaryKey()) {
        property.addVocabularyTerm(new EMTerm(EMTermType.ID_TERM, "true"));
      }

      // Value types are unreliable - only add to the model if it is flagged as safe in the
      // fieldTypeChecker
      if (!field.getValueType().isEmpty()
          && fieldTypeChecker.isTypeSafe(this.underlyingApplicationName, field.getT24name())) {
        property.addVocabularyTerm(new EMTerm(EMTermType.TYPE_TERM, field.getValueType()));
      }

      if (!field.getBusinessType().isEmpty()) {
        property.addVocabularyTerm(
            new EMTerm(EMTermType.BUSINESS_TYPE_TERM, field.getBusinessType()));
      }

      // Handle the selection field flags.
      if (field.isSelectionOnly()) {
        property.addVocabularyTerm(new EMTerm(EMTermType.FIELD_RESTRICTION_TERM, "filterOnly"));
        property.setSelectionInfo("selectionOnly: true");
      } else if (field.getSelectionField().isEmpty()) {
        property.addVocabularyTerm(new EMTerm(EMTermType.FIELD_RESTRICTION_TERM, "displayOnly"));
        property.setSelectionInfo("selectable: false");
      } else if (field.getSelectionField().equals(field.getT24name())) {
        // Doesn't need FIELD_RESTRICTION because is both displayable and filterable.
        property.setSelectionInfo(""); // Display nothing, since the values are the same
      } else {
        // Doesn't need FIELD_RESTRICTION because is both displayable and filterable.
        property.setSelectionInfo("selectionField: " + field.getSelectionField());
      }

      // handle the 'joinedTo' field
      if (!field.getJoinedTo().isEmpty()) {
        property.setJoinedto("joinedTo: " + field.getJoinedTo());
      }

      // handle the 'propertyGroup' field
      if (!field.getPropertyGroup().isEmpty()) {
        property.setPropertyGroup("propertyGroup: " + field.getPropertyGroup());
      }

      // Now add the property to the right part of the entity, may need to create parent properties
      String mvGroupName = field.getMvGroup();
      if (!mvGroupName.isEmpty()) {
        String mvgn = EMUtils.camelCaseName(mvGroupName) + GeneratorConstants.MVGROUP_SUFFIX;
        EMProperty mvGroup = EMUtils.getPropertyByName(properties, mvgn);
        if (mvGroup == null) {
          mvGroup = new EMProperty(mvgn);
          mvGroup.addVocabularyTerm(new EMTerm(EMTermType.LIST_TERM, "true"));
          if (RESOURCE_TYPE.version.equals(type)) {
            IRISMetadataGeneratorCommon.addOriginalMvSvPropertiesInGroup(mvGroup);
          }
          properties.add(mvGroup);
          properties = mvGroup.getSubProperties();
        } else {
          properties = mvGroup.getSubProperties();
        }
        if (field.isLanguageField() && field.getSvGroup().isEmpty()) {
          mvGroup.addVocabularyTerm(new EMTerm(EMTermType.TERM_LANG_TYPE, "true"));
          EMProperty languageCodeProperty = new EMProperty("LanguageCode");
          properties.add(languageCodeProperty);
        }
      }
      String svGroupName = field.getSvGroup();
      if (!svGroupName.isEmpty()) {
        String svgn = EMUtils.camelCaseName(svGroupName) + GeneratorConstants.SVGROUP_SUFFIX;
        EMProperty svGroup = EMUtils.getPropertyByName(properties, svgn);
        if (svGroup == null) {
          svGroup = new EMProperty(svgn);
          svGroup.addVocabularyTerm(new EMTerm(EMTermType.LIST_TERM, "true"));
          if (RESOURCE_TYPE.version.equals(type)) {
            IRISMetadataGeneratorCommon.addOriginalMvSvPropertiesInGroup(svGroup);
          }
          properties.add(svGroup);
          properties = svGroup.getSubProperties();
        } else {
          properties = svGroup.getSubProperties();
        }
        if (field.isLanguageField()) {
          svGroup.addVocabularyTerm(new EMTerm(EMTermType.TERM_LANG_TYPE, "true"));
          EMProperty languageCodeProperty = new EMProperty("LanguageCode");
          properties.add(languageCodeProperty);
        }
      }
      properties.add(property);
    }
    return entity;
  }
  private void save(OutputStream os, List<ContextEnquiryLink> list) throws IOException {

    PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(os)));

    try {
      /*
       * Add the Header
       */
      addHeader(writer, list);

      /*
       * Then all GET -> and store the unique applications in the same run
       */
      HashSet<String> applications = new HashSet<String>();
      for (ContextEnquiryLink link : list) {
        if (!link.isVersion()) {
          if (!applications.contains(link.getApplication())) {
            applications.add(link.getApplication());
          }
        }

        link.writeToStream(writer);
        writer.println("");
      }

      writer.println("      }\n");

      /*
      			 * Then create the conditions
      			 * something like this :
      			 *
      //			resource ApplicationJoinsToCustomer {
      //				type: item
      //				entity: Entity
      //				view: T24EntityMetadata {
      //					properties [ JoinedTo="CUSTOMER" ]
      //				}
      //				path: "/ContextEnquiryCustomer/{entity}"
      //			}
      			*/

      /*
       * First, get all the applications (unique) we could have done that
       */
      for (String sOneApp : applications) {
        String sCCApp = EMUtils.camelCaseName(sOneApp);
        writer.println("      resource ApplicationJoinsTo" + sCCApp + " {");
        writer.println("         type: item");
        writer.println("         entity: Entity ");
        writer.println("         view: T24EntityMetadata {");
        writer.println("	        properties [ JoinedTo=\"" + sOneApp + "\" ]");
        writer.println("         }");
        writer.println("         path: \"/ContextEnquiry" + sCCApp + "/{entity}\"");
        writer.println("      }\n");
      }

      writer.println("   }");
      writer.println("}");
    } finally {
      writer.flush();
      writer.close();
    }
  }