@Override
  protected boolean run(final Outline outline, final Options options) throws Exception {
    assert outline != null;
    assert options != null;

    for (ClassOutline type : outline.getClasses()) {
      addGenerated(type.implClass);
    }

    for (EnumOutline type : outline.getEnums()) {
      addGenerated(type.clazz);
    }

    return true;
  }
  public MPropertyOutline generate(
      MClassOutline classOutline,
      MModelInfo<NType, NClass> modelInfo,
      MPropertyInfo<NType, NClass> propertyInfo) {

    final FieldOutline fieldOutline = outline.getField(this.propertyInfo);

    final MPropertyAccessorFactory propertyAccessorFactory =
        new CMPropertyAccessorFactory(this.fieldAccessorFactory, fieldOutline);
    return new CMPropertyOutline(classOutline, propertyInfo, propertyAccessorFactory);
  }
  @Override
  public boolean run(Outline outline, Options opt, ErrorHandler errorHandler) throws SAXException {
    for (ClassOutline co : outline.getClasses()) {

      CPluginCustomization c = co.target.getCustomizations().find(uri.toString(), "keyId");
      CPluginCustomization d = co.target.getCustomizations().find(metaURI.toString(), "type");
      if (c == null) {
        continue;
      }

      Element keyed = c.element;
      NodeList keyList = keyed.getChildNodes();
      Key[] keys = new Key[keyList.getLength()];
      for (int j = 0; j < keyList.getLength(); j++) {
        keys[j] =
            new Key(
                keyList.item(j).getTextContent(),
                NameUtils.map(
                    keyList.item(j).getAttributes().getNamedItem("type").getTextContent(), true));
      }

      HashMap<String, Object> map = new HashMap<String, Object>();
      map.put("klassName", co.target.shortName);
      map.put("typeName", d.element.getAttribute("name"));
      map.put("keys", keys);

      String equals = SemanticXSDModelCompilerImpl.getTemplatedCode(equalsTempl, map);
      String hashKy = SemanticXSDModelCompilerImpl.getTemplatedCode(hashKyTempl, map);

      co.implClass.direct(equals);
      co.implClass.direct(hashKy);

      c.markAsAcknowledged();
    }

    return true;
  }