protected EditableFeatureType getTheFeatureType() throws InitializeException {
    EditableFeatureType fType = super.getTheFeatureType();
    try {
      this.open();
      this.resourcesBegin();
    } catch (DataException e) {
      throw new InitializeException(this.getName(), e);
    }
    try {

      EditableFeatureAttributeDescriptor attr = addGeometryColumn(fType);
      attr.setGeometryType(this.shpFile.getGeometryType());
      attr.setGeometrySubType(this.shpFile.getGeometrySubType());
      // String srs = this.getSRSFromPrj(this.shpFile.getSRSParameters());
      // if (srs == null){
      // // TODO petar ??
      // srs = "EPSG:23030";
      // }
      IProjection srs = getShpParameters().getSRS();
      if (srs == null) {
        srs = CRSFactory.getCRS("EPSG:23030");
      }

      attr.setSRS(srs);

      return fType;
    } catch (ReadException e) {
      throw new InitializeException(e);
    } finally {
      this.resourcesEnd();
    }
  }
  protected static EditableFeatureAttributeDescriptor addGeometryColumn(EditableFeatureType fType) {

    EditableFeatureAttributeDescriptor attrTmp = null;
    EditableFeatureAttributeDescriptor attr = null;
    Iterator iter = fType.iterator();
    while (iter.hasNext()) {
      attrTmp = (EditableFeatureAttributeDescriptor) iter.next();
      if (attrTmp.getDataType() == DataTypes.GEOMETRY) {
        if (attr != null) {
          // Two geom fields not allowed
          fType.remove(attrTmp.getName());
        } else {
          attr = attrTmp;
          attr.setName(GEOMETRY_ATTIBUTE_NAME);
        }
      }
    }

    if (attr == null) {
      attr = fType.add(GEOMETRY_ATTIBUTE_NAME, DataTypes.GEOMETRY);
      try {
        attr.setDefaultValue(geomManager.createNullGeometry(SUBTYPES.GEOM2D));
      } catch (CreateGeometryException e) {
        logger.error("Error creating the envelope", e);
      }
    }

    fType.setDefaultGeometryAttributeName(attr.getName());
    return attr;
  }