All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.uqbar.common.transaction.Collection.TransactionalData.scala Maven / Gradle / Ivy

There is a newer version: 3.6.3
Show newest version
package com.uqbar.common.transaction.Collection

import org.uqbar.commons.utils.TransactionalAndObservable
import org.uqbar.commons.utils.When
import org.uqbar.commons.utils.Observable
import org.uqbar.commons.model.ObservableUtils
import org.uqbar.commons.utils.ReflectionUtils

@Observable
abstract class TransactionalData[D](owner:Any, fieldName:String) {

  When(this) change "data" fireChange fieldName of owner
  var data: D = _
  

  def setData(aData: D) {
    aData match{
      case null => data = defauldValue
      case td:TransactionalData[D] => data = td.data
      case data => this.data = data
    }
  }

  protected def updateData[T](action: (D) => T): T = {
    var act = action(data)
    ReflectionUtils.invokeSetter(owner, fieldName, this)
    ObservableUtils.firePropertyChanged(owner, fieldName, this)
    act
  }

  protected def defauldValue: D
  
  override def toString() = data.toString
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy