CampoAbstracto.vb

  1. ' CampoAbstracto.vb — ProInf.net — feb-2012
  2. '
  3. ' Base de los campos predefinidos (cálculos y estadística)
  4. ' y de los definidos por el usuario
  5.  
  6. Public Enum TipoCampo
  7. Texto
  8. Entero
  9. Numero
  10. Logico
  11. Fecha
  12. Hora
  13. End Enum
  14.  
  15. Public Interface ICampo
  16. Property Nombre() As String
  17. Function Tipo() As TipoCampo
  18. Function Aleatorio() As String
  19. End Interface
  20.  
  21. Public Interface IAnalizable
  22. Sub Analizar(ByVal linea As String)
  23. End Interface
  24.  
  25. Public Interface IReiniciable
  26. Sub Reiniciar()
  27. End Interface
  28.  
  29. Public MustInherit Class CampoPredefinido 'para cálculo o estadística
  30. Implements ICampo
  31.  
  32. Public Property Nombre() As String Implements ICampo.Nombre
  33.  
  34. Public Overridable Function Tipo() As TipoCampo Implements ICampo.Tipo
  35. Return TipoCampo.Texto
  36. End Function
  37.  
  38. Public MustOverride Function Aleatorio() As String Implements ICampo.Aleatorio
  39.  
  40. Public Overrides Function ToString() As String
  41. Return Nombre 'String.Format("{0}: {1}", Nombre, Me.GetType().Name)
  42. End Function
  43.  
  44. End Class
  45.  
  46. Public MustInherit Class CampoDefinido ' por el usuario en el formulario
  47. Inherits CampoPredefinido
  48. Implements IAnalizable
  49.  
  50. Public Sub New(Optional ByVal texto As String = "")
  51. Analizar(texto)
  52. End Sub
  53.  
  54. Public MustOverride Sub Analizar(ByVal texto As String) Implements IAnalizable.Analizar
  55.  
  56. Public Shared Function Instanciar(ByVal texto As String) As CampoDefinido
  57. Try
  58. Dim analisis As New Analisis(texto)
  59. Dim nombreClase = "ProInf.BaseDatosAleatoria." & analisis.Clase
  60. Dim objeto = Activator.CreateInstance(Type.GetType(nombreClase), texto)
  61. Return objeto
  62. Catch ex As Exception
  63. DialogoError(ex)
  64. Return Nothing
  65. End Try
  66. End Function
  67.  
  68. Protected Class Analisis
  69. Public Nombre As String = ""
  70. Public Clase As String = ""
  71. Public Parametros As String = ""
  72.  
  73. Public Sub New(ByVal texto As String) 'Ej: "Tipo El nombre = Los parámetros"
  74. Dim posicionIgual = texto.IndexOf("=")
  75. If posicionIgual > 0 Then
  76. Parametros = texto.Substring(posicionIgual + 1).Trim()
  77. Dim izquierdaIgual = texto.Substring(0, posicionIgual)
  78. Dim posicionEspacio = izquierdaIgual.IndexOf(" ")
  79. If posicionEspacio > 0 Then
  80. Clase = "Campo" & izquierdaIgual.Substring(0, posicionEspacio).Trim()
  81. Nombre = izquierdaIgual.Substring(posicionEspacio + 1).Trim()
  82. End If
  83. End If
  84. End Sub
  85.  
  86. End Class
  87.  
  88. End Class

Proinf.net