Skip to content

Instantly share code, notes, and snippets.

@frozenspider
Created February 21, 2014 14:46
Show Gist options
  • Save frozenspider/9135498 to your computer and use it in GitHub Desktop.
Save frozenspider/9135498 to your computer and use it in GitHub Desktop.
class ProposalMapping
/**
* Entity representing mapping of comp proposal from XLS column names.
*
* @author FS
*/
// Please preserve attribute order when defining a new mapping
class ProposalMapping(
// Date
val executionDate: Option[String],
val commencementDate: Option[String],
val expirationDate: Option[String],
// Integer
val freeMonths: Option[String],
val leaseTerm: Option[String],
// Float
val ti: Option[String],
val startingRent: Option[String],
val effectiveRent: Option[String],
val faceRent: Option[String],
val avgFaceRent: Option[String],
val concessionsValue: Option[String],
val operatingExpensesValue: Option[String],
val proRataPercent: Option[String],
// Double
val grossAnnualAskingRent: Option[String],
val grossAnnualTakingRent: Option[String],
// Boolean
val sublease: Option[String],
// String
val concessionsNotes: Option[String],
val operatingExpensesNotes: Option[String],
val comments: Option[String],
val renewalOptions: Option[String],
val annualTaxesNotes: Option[String],
val percentageRent: Option[String],
// Long
val transactionSize: Option[String],
// Object
val transactionType: Option[String],
val spaceType: Option[String],
val leaseType: Option[String],
val freeRentType: Option[String],
val operatingExpensesType: Option[String],
val concessionsType: Option[String],
val leaseEscalations: Option[String],
val rentBumpsDollar: Option[String],
val rentBumpsPercent: Option[String],
val rentBumpYears: Option[String],
val city: Option[String],
val state: Option[String],
// Floor-related
val floorOccupancies: Option[String],
val suite: Option[String],
val mainRentedFloor: Option[String],
val otherRentedFloors: Option[String],
// Building-related
val buildingName: Option[String],
val buildingAddress: Option[String],
val buildingYear: Option[String],
val buildingYearRenovated: Option[String],
val buildingClass: Option[String],
val buildingPropertyType: Option[String],
val buildingPropertySubtype: Option[String],
val buildingSize: Option[String],
val buildingParkingRatio: Option[String],
val buildingParkingType: Option[String],
val buildingParkingReserved: Option[String],
val buildingParkingUnreserved: Option[String],
val buildingOfficePortion: Option[String],
val buildingFloorsCount: Option[String],
val buildingLoadFactor: Option[String],
val buildingCeilingHeight: Option[String],
val buildingGroundLvlDoorsCount: Option[String],
val buildingLoadingDocksCount: Option[String],
val buildingSprinkler: Option[String],
val buildingRail: Option[String],
val buildingStreetFrontage: Option[String],
val buildingCornerUnit: Option[String],
val buildingSellingBasement: Option[String],
val buildingVentedSpace: Option[String],
val buildingCrossStreets: Option[String],
// Tenant
val tenantName: Option[String],
val tenantIndustry: Option[String],
// Landlord
val landlordName: Option[String],
val sublessorName: Option[String],
// Companies/Brokers
val tenantRealtyCompanies: Option[String],
val tenantRealtyBrokers: Option[String],
val landlordRealtyCompanies: Option[String],
val landlordRealtyBrokers: Option[String]) {
def columns: Set[String] = ProposalMapping.columns
lazy val asMap: Map[String, String] = {
???
}
}
@frozenspider
Copy link
Author

object ProposalMapping {
  lazy val columns: Set[String] = {
    // Using Scala Reflection here to get list of methods of type Option[String]
    val universe = scala.reflect.runtime.universe
    val allMembers = universe.typeOf[ProposalMapping].members
    val optionTypeSym = universe.typeOf[Option[String]].typeSymbol
    val mappingVals = allMembers filter (_.isPublic) filter (_.typeSignature.typeSymbol == optionTypeSym)
    val res = mappingVals map (_.name.decodedName.toString)
    res.toSet
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment