public List <OpstiDomenskiObjekat> VratiListu(System.Data.OleDb.OleDbDataReader citac) { List <OpstiDomenskiObjekat> rentiranja = new List <OpstiDomenskiObjekat>(); while (citac.Read()) { Rentiranje rent = new Rentiranje(); Klijent k = new Klijent(); Automobil a = new Automobil(); Zaposleni zz = new Zaposleni(); Zaposleni zr = new Zaposleni(); rent.rentiranjeID = citac.GetString(0); a.AutomobilID = citac.GetString(1); k.KlijentID = citac.GetString(2); rent.datumZaduzenja = citac.GetDateTime(3); if (!citac.IsDBNull(4)) { rent.datumRazduzenja = citac.GetDateTime(4); } rent.ukupnaCena = Convert.ToDouble(citac["UkupnaCena"]); rent.razduzeno = citac.GetBoolean(6); rent.stornirano = citac.GetBoolean(7); zz.ZaposleniID = citac.GetString(8); if (!citac.IsDBNull(9)) { zr.ZaposleniID = citac.GetString(9); } else { zr.ZaposleniID = "/"; } rent.klijent = k; rent.automobil = a; rent.zaduzioID = zz; rent.razduzioID = zr; rentiranja.Add(rent); } return(rentiranja); }
/// <summary> Returns the Java source code for a class that represents the specified segment.</summary> public static System.String makeSegment(System.String name, System.String version) { Console.WriteLine("Making segment " + name); System.Text.StringBuilder source = new System.Text.StringBuilder(); try { //UPGRADE_NOTE: There are other database providers or managers under System.Data namespace which can be used optionally to better fit the application requirements. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1208'" System.Collections.ArrayList elements = new System.Collections.ArrayList(); SegmentElement se; System.String segDesc = null; using (System.Data.OleDb.OleDbConnection conn = NormativeDatabase.Instance.Connection) { System.Text.StringBuilder sql = new System.Text.StringBuilder(); sql.Append("SELECT HL7SegmentDataElements.seg_code, HL7SegmentDataElements.seq_no, "); sql.Append("HL7SegmentDataElements.repetitional, HL7SegmentDataElements.repetitions, "); sql.Append("HL7DataElements.description, HL7DataElements.length, HL7DataElements.table_id, "); sql.Append("HL7SegmentDataElements.req_opt, HL7Segments.description, HL7DataElements.data_structure "); sql.Append("FROM HL7Versions RIGHT JOIN (HL7Segments INNER JOIN (HL7DataElements INNER JOIN HL7SegmentDataElements "); sql.Append("ON (HL7DataElements.version_id = HL7SegmentDataElements.version_id) "); sql.Append("AND (HL7DataElements.data_item = HL7SegmentDataElements.data_item)) "); sql.Append("ON (HL7Segments.version_id = HL7SegmentDataElements.version_id) "); sql.Append("AND (HL7Segments.seg_code = HL7SegmentDataElements.seg_code)) "); sql.Append("ON (HL7Versions.version_id = HL7Segments.version_id) "); sql.Append("WHERE HL7SegmentDataElements.seg_code = '"); sql.Append(name); sql.Append("' and HL7Versions.hl7_version = '"); sql.Append(version); sql.Append("' ORDER BY HL7SegmentDataElements.seg_code, HL7SegmentDataElements.seq_no;"); //System.out.println(sql.toString()); //for debugging //UPGRADE_TODO: Method 'java.sql.Connection.createStatement' was converted to 'SupportClass.TransactionManager.manager.CreateStatement' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javasqlConnectioncreateStatement'" System.Data.OleDb.OleDbCommand stmt = SupportClass.TransactionManager.manager.CreateStatement(conn); //UPGRADE_TODO: Interface 'java.sql.ResultSet' was converted to 'System.Data.OleDb.OleDbDataReader' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javasqlResultSet'" System.Data.OleDb.OleDbCommand temp_OleDbCommand; temp_OleDbCommand = stmt; temp_OleDbCommand.CommandText = sql.ToString(); System.Data.OleDb.OleDbDataReader rs = temp_OleDbCommand.ExecuteReader(); while (rs.Read()) { if (segDesc == null) { segDesc = System.Convert.ToString(rs[9 - 1]); } se = new SegmentElement(); se.field = Convert.ToInt32(rs.GetValue(2 - 1)); se.rep = System.Convert.ToString(rs[3 - 1]); if (rs.IsDBNull(4 - 1)) { se.repetitions = 0; } else { se.repetitions = Convert.ToInt32(rs.GetValue(4 - 1)); } if (se.repetitions == 0) { if (se.rep == null || !se.rep.ToUpper().Equals("Y".ToUpper())) { se.repetitions = 1; } } se.desc = System.Convert.ToString(rs[5 - 1]); if (!rs.IsDBNull(6 - 1)) { se.length = Convert.ToInt32(rs.GetValue(6 - 1)); } se.table = Convert.ToInt32(rs.GetValue(7 - 1)); se.opt = System.Convert.ToString(rs[8 - 1]); se.type = System.Convert.ToString(rs[10 - 1]); //shorten CE_x to CE if (se.type.StartsWith("CE")) { se.type = "CE"; } elements.Add(se); /*System.out.println("Segment: " + name + " Field: " + se.field + " Rep: " + se.rep + * " Repetitions: " + se.repetitions + " Desc: " + se.desc + " Length: " + se.length + * " Table: " + se.table + " Segment Desc: " + segDesc);*/ } rs.Close(); //UPGRADE_ISSUE: Method 'java.sql.Statement.close' was not converted. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1000_javasqlStatementclose'" stmt.Dispose(); NormativeDatabase.Instance.returnConnection(conn); } //write imports, class documentation, etc ... source.Append("using System;\r\n"); source.Append("using ca.uhn.hl7v2.model;\r\n"); source.Append("using "); source.Append(SourceGenerator.getVersionPackageName(version)); source.Append("datatype;\r\n\r\n"); source.Append("using ca.uhn.log;\r\n"); source.Append("using ca.uhn.hl7v2.parser;\r\n"); source.Append("using ca.uhn.hl7v2;\r\n\r\n"); source.Append("namespace "); source.Append(SourceGenerator.getVersionPackageName(version)); source.Append("segment{\r\n\r\n"); source.Append("/**\r\n"); source.Append(" * <p>Represents an HL7 "); source.Append(name); source.Append(" message segment. \r\n"); source.Append(" * This segment has the following fields:</p><p>\r\n"); for (int i = 0; i < elements.Count; i++) { se = (SegmentElement)elements[i]; source.Append(" * "); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(": "); source.Append(se.desc); source.Append(" ("); source.Append(se.type); source.Append(")<br> \r\n"); } source.Append(" * </p><p>The get...() methods return data from individual fields. These methods \r\n"); source.Append(" * do not throw exceptions and may therefore have to handle exceptions internally. \r\n"); source.Append(" * If an exception is handled internally, it is logged and null is returned. \r\n"); source.Append(" * This is not expected to happen - if it does happen this indicates not so much \r\n"); source.Append(" * an exceptional circumstance as a bug in the code for this class.</p> \r\n"); source.Append(" */\r\n"); source.Append("[Serializable]\r\n"); source.Append("public class "); source.Append(name); source.Append(" : AbstractSegment "); //implement interface from model.control package if required /*Class correspondingControlInterface = Control.getInterfaceImplementedBy(name); * if (correspondingControlInterface != null) { * source.append("implements "); * source.append(correspondingControlInterface.getName()); * } */ source.Append(" {\r\n\r\n"); source.Append(" /**\r\n"); source.Append(" * Creates a "); source.Append(name); source.Append(" ("); source.Append(segDesc); source.Append(") segment object that belongs to the given \r\n"); source.Append(" * message. \r\n"); source.Append(" */\r\n"); //write constructor source.Append(" public "); source.Append(name); source.Append("(Group parent, ModelClassFactory factory) : base(parent,factory) {\r\n"); source.Append(" Message message = Message;\r\n"); if (elements.Count > 0) { source.Append(" try {\r\n"); for (int i = 0; i < elements.Count; i++) { se = (SegmentElement)elements[i]; System.String type = SourceGenerator.getAlternateType(se.type, version); source.Append(" this.add("); source.Append("typeof(" + type + ")"); // if (type.equalsIgnoreCase("Varies")) { // } else { // source.append("factory.getTypeClass(\""); // source.append(type); // source.append("\", \""); // source.append(version); // source.append("\")"); // } source.Append(", "); if (se.opt == null) { source.Append("false"); } else { if (se.opt.ToUpper().Equals("R".ToUpper())) { source.Append("true"); } else { source.Append("false"); } } source.Append(", "); source.Append(se.repetitions); source.Append(", "); source.Append(se.length); source.Append(", "); if (se.type.Equals("ID") || se.type.Equals("IS")) { source.Append("new System.Object[]{message, "); source.Append(se.table); source.Append("}"); } else { source.Append("new System.Object[]{message}"); } if (se.desc != null && se.desc.Trim().Length > 0) { source.Append(", "); source.Append("\"" + se.GetDescriptionWithoutSpecialCharacters() + "\""); } source.Append(");\r\n"); } source.Append(" } catch (HL7Exception he) {\r\n"); source.Append(" HapiLogFactory.getHapiLog(GetType()).error(\"Can't instantiate \" + this.getStructureName(), he);\r\n"); source.Append(" }\r\n"); } source.Append(" }\r\n\r\n"); //write a datatype-specific accessor for each field for (int i = 0; i < elements.Count; i++) { se = (SegmentElement)elements[i]; if (!se.desc.ToUpper().Equals("UNUSED".ToUpper())) { //some entries in 2.1 DB say "unused" System.String type = SourceGenerator.getAlternateType(se.type, version); source.Append("\t/**\r\n"); source.Append("\t* Returns "); if (se.repetitions != 1) { source.Append("a single repetition of "); } source.Append(se.desc); source.Append("("); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(").\r\n"); if (se.repetitions != 1) { source.Append("\t* @param rep the repetition number (this is a repeating field)\r\n"); source.Append("\t* @throws HL7Exception if the repetition number is invalid.\r\n"); } source.Append("\t*/\r\n"); source.Append("\tpublic "); source.Append(type); source.Append(" "); source.Append(SourceGenerator.makeAccessorNameCSharp(se.desc, se.repetitions)); if (se.repetitions != 1) { source.Append("(int rep)"); } source.Append("\n\t{\r\n"); if (se.repetitions == 1) { source.Append("\t\tget{\r\n"); } source.Append("\t\t\t"); source.Append(type); source.Append(" ret = null;\r\n"); source.Append("\t\t\ttry\n\t\t\t{\r\n"); source.Append("\t\t\tType t = this.getField("); source.Append(se.field); source.Append(", "); if (se.repetitions == 1) { source.Append("0"); } else { source.Append("rep"); } source.Append(");\r\n"); source.Append("\t\t\t\tret = ("); source.Append(type); source.Append(")t;\r\n"); if (se.repetitions == 1) { source.Append("\t\t\t}\n\t\t\t catch (HL7Exception he) {\r\n"); source.Append("\t\t\tHapiLogFactory.getHapiLog(GetType()).error(\"Unexpected problem obtaining field value. This is a bug.\", he);\r\n"); source.Append("\t\t\t\tthrow new System.Exception(\"An unexpected error ocurred\", he);\r\n"); } source.Append("\t\t} catch (System.Exception ex) {\r\n"); source.Append("\t\t\tHapiLogFactory.getHapiLog(GetType()).error(\"Unexpected problem obtaining field value. This is a bug.\", ex);\r\n"); source.Append("\t\t\t\tthrow new System.Exception(\"An unexpected error ocurred\", ex);\r\n"); source.Append(" }\r\n"); source.Append("\t\t\treturn ret;\r\n"); if (se.repetitions == 1) { source.Append("\t}\r\n"); //End get } source.Append(" }\r\n\r\n"); //add an array accessor as well for repeating fields if (se.repetitions != 1) { source.Append(" /**\r\n"); source.Append(" * Returns all repetitions of "); source.Append(se.desc); source.Append(" ("); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(").\r\n"); source.Append(" */\r\n"); source.Append(" public "); source.Append(type); source.Append("[] "); source.Append(SourceGenerator.makeAccessorName(se.desc)); source.Append("() {\r\n"); source.Append(" "); source.Append(type); source.Append("[] ret = null;\r\n"); source.Append(" try {\r\n"); source.Append(" Type[] t = this.getField("); source.Append(se.field); source.Append("); \r\n"); source.Append(" ret = new "); source.Append(type); source.Append("[t.Length];\r\n"); source.Append(" for (int i = 0; i < ret.Length; i++) {\r\n"); source.Append(" ret[i] = ("); source.Append(type); source.Append(")t[i];\r\n"); source.Append(" }\r\n"); source.Append(" } catch (HL7Exception he) {\r\n"); source.Append(" HapiLogFactory.getHapiLog(this.GetType()).error(\"Unexpected problem obtaining field value. This is a bug.\", he);\r\n"); source.Append(" throw new System.Exception(\"An unexpected error ocurred\", he);\r\n"); source.Append(" } catch (System.Exception cce) {\r\n"); source.Append(" HapiLogFactory.getHapiLog(GetType()).error(\"Unexpected problem obtaining field value. This is a bug.\", cce);\r\n"); source.Append(" throw new System.Exception(\"An unexpected error ocurred\", cce);\r\n"); source.Append(" }\r\n"); source.Append(" return ret;\r\n"); source.Append("}\r\n\r\n"); } } } //add adapter method code for control package if it exists //source.append(Control.getImplementation(correspondingControlInterface, version)); source.Append("\n}"); } catch (System.Data.OleDb.OleDbException sqle) { SupportClass.WriteStackTrace(sqle, Console.Error); } return(source.ToString()); }
/// <summary> Creates source code for a single data type in the HL7 normative /// database. /// </summary> /// <param name="targetDirectory">the directory into which the file will be written /// </param> /// <param name="datatype">the name (e.g. ST, ID, etc.) of the data type to be created /// </param> /// <param name="version">the HL7 version of the intended data type /// </param> public static void make(System.IO.FileInfo targetDirectory, System.String dataType, System.String version) { Console.WriteLine(" Writing " + targetDirectory.FullName + dataType); //make sure that targetDirectory is a directory ... if (!System.IO.Directory.Exists(targetDirectory.FullName)) { throw new System.IO.IOException("Can't create file in " + targetDirectory.ToString() + " - it is not a directory."); } //get any components for this data type //UPGRADE_NOTE: There are other database providers or managers under System.Data namespace which can be used optionally to better fit the application requirements. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1208'" System.Data.OleDb.OleDbConnection conn = NormativeDatabase.Instance.Connection; //UPGRADE_TODO: Method 'java.sql.Connection.createStatement' was converted to 'SupportClass.TransactionManager.manager.CreateStatement' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javasqlConnectioncreateStatement'" System.Data.OleDb.OleDbCommand stmt = SupportClass.TransactionManager.manager.CreateStatement(conn); System.Text.StringBuilder sql = new System.Text.StringBuilder(); //this query is adapted from the XML SIG informative document sql.Append("SELECT HL7DataStructures.data_structure, HL7DataStructureComponents.seq_no, HL7DataStructures.description, HL7DataStructureComponents.table_id, "); sql.Append("HL7Components.description, HL7Components.table_id, HL7Components.data_type_code, HL7Components.data_structure "); sql.Append("FROM HL7Versions LEFT JOIN (HL7DataStructures LEFT JOIN (HL7DataStructureComponents LEFT JOIN HL7Components "); sql.Append("ON HL7DataStructureComponents.comp_no = HL7Components.comp_no AND "); sql.Append("HL7DataStructureComponents.version_id = HL7Components.version_id) "); sql.Append("ON HL7DataStructures.version_id = HL7DataStructureComponents.version_id "); sql.Append("AND HL7DataStructures.data_structure = HL7DataStructureComponents.data_structure) "); sql.Append("ON HL7DataStructures.version_id = HL7Versions.version_id "); sql.Append("WHERE HL7DataStructures.data_structure = '"); sql.Append(dataType); sql.Append("' AND HL7Versions.hl7_version = '"); sql.Append(version); sql.Append("' ORDER BY HL7DataStructureComponents.seq_no"); //System.out.println(sql.toString()); //for debugging //UPGRADE_TODO: Interface 'java.sql.ResultSet' was converted to 'System.Data.OleDb.OleDbDataReader' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javasqlResultSet'" System.Data.OleDb.OleDbCommand temp_OleDbCommand; temp_OleDbCommand = stmt; temp_OleDbCommand.CommandText = sql.ToString(); System.Data.OleDb.OleDbDataReader rs = temp_OleDbCommand.ExecuteReader(); System.Collections.ArrayList dataTypes = new System.Collections.ArrayList(20); System.Collections.ArrayList descriptions = new System.Collections.ArrayList(20); System.Collections.ArrayList tables = new System.Collections.ArrayList(20); System.String description = null; while (rs.Read()) { if (description == null) { description = System.Convert.ToString(rs[3 - 1]); } System.String de = System.Convert.ToString(rs[5 - 1]); System.String dt = System.Convert.ToString(rs[8 - 1]); int ta = -1; if (!rs.IsDBNull(4 - 1)) { ta = rs.GetInt32(4 - 1); } //trim all CE_x to CE if (dt != null) { if (dt.StartsWith("CE")) { dt = "CE"; } } //System.out.println("Component: " + de + " Data Type: " + dt); //for debugging dataTypes.Add(dt); descriptions.Add(de); tables.Add((System.Int32)ta); } if (dataType.ToUpper().Equals("TS") && version != "2.5") { dataTypes[0] = "TSComponentOne"; } rs.Close(); //UPGRADE_ISSUE: Method 'java.sql.Statement.close' was not converted. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1000_javasqlStatementclose'" stmt.Dispose(); NormativeDatabase.Instance.returnConnection(conn); //if there is only one component make a Primitive, otherwise make a Composite System.String source = null; if (dataTypes.Count == 1) { if (dataType.Equals("FT") || dataType.Equals("ST") || dataType.Equals("TX") || dataType.Equals("NM") || dataType.Equals("SI") || dataType.Equals("TN") || dataType.Equals("GTS")) { source = makePrimitive(dataType, description, version); } else { source = null; //note: IS, ID, DT, DTM, and TM are coded manually } } else if (dataTypes.Count > 1) { int numComponents = dataTypes.Count; //copy data into arrays ... System.String[] type = new System.String[numComponents]; System.String[] desc = new System.String[numComponents]; int[] table = new int[numComponents]; for (int i = 0; i < numComponents; i++) { type[i] = ((System.String)dataTypes[i]); desc[i] = ((System.String)descriptions[i]); table[i] = ((System.Int32)tables[i]); } source = makeComposite(dataType, description, type, desc, table, version); } else { //no components? //throw new DataTypeException("The data type " + dataType + " could not be found"); Console.WriteLine("No components for " + dataType); } //System.out.println(source); //write to file ... if (source != null) { System.String targetFile = targetDirectory.ToString() + "/" + dataType + ".cs"; //UPGRADE_WARNING: At least one expression was used more than once in the target code. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1181'" //UPGRADE_TODO: Constructor 'java.io.FileWriter.FileWriter' was converted to 'System.IO.StreamWriter' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioFileWriterFileWriter_javalangString_boolean'" //UPGRADE_TODO: Class 'java.io.FileWriter' was converted to 'System.IO.StreamWriter' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioFileWriter'" using (System.IO.StreamWriter writer = new System.IO.StreamWriter(targetFile)) { writer.Write(source); writer.Write("}"); //End namespace } } else { Console.WriteLine("No Source for " + dataType); } }
/// <summary> Creates source code for a single data type in the HL7 normative database. </summary> /// /// <exception cref="IOException"> Thrown when an IO failure occurred. </exception> /// /// <param name="targetDirectory"> the directory into which the file will be written. </param> /// <param name="dataType"> Type of the data. </param> /// <param name="version"> the HL7 version of the intended data type. </param> /// /// ### <param name="datatype"> the name (e.g. ST, ID, etc.) of the data type to be created. </param> public static void make(System.IO.FileInfo targetDirectory, System.String dataType, System.String version) { Console.WriteLine(" Writing " + targetDirectory.FullName + dataType); //make sure that targetDirectory is a directory ... if (!System.IO.Directory.Exists(targetDirectory.FullName)) { throw new System.IO.IOException("Can't create file in " + targetDirectory + " - it is not a directory."); } //get any components for this data type System.Data.OleDb.OleDbConnection conn = NormativeDatabase.Instance.Connection; System.Data.OleDb.OleDbCommand stmt = SupportClass.TransactionManager.manager.CreateStatement(conn); System.Text.StringBuilder sql = new System.Text.StringBuilder(); //this query is adapted from the XML SIG informative document sql.Append( "SELECT HL7DataStructures.data_structure, HL7DataStructureComponents.seq_no, HL7DataStructures.description, HL7DataStructureComponents.table_id, "); sql.Append( "HL7Components.description, HL7Components.table_id, HL7Components.data_type_code, HL7Components.data_structure "); sql.Append( "FROM HL7Versions LEFT JOIN (HL7DataStructures LEFT JOIN (HL7DataStructureComponents LEFT JOIN HL7Components "); sql.Append("ON HL7DataStructureComponents.comp_no = HL7Components.comp_no AND "); sql.Append("HL7DataStructureComponents.version_id = HL7Components.version_id) "); sql.Append("ON HL7DataStructures.version_id = HL7DataStructureComponents.version_id "); sql.Append("AND HL7DataStructures.data_structure = HL7DataStructureComponents.data_structure) "); sql.Append("ON HL7DataStructures.version_id = HL7Versions.version_id "); sql.Append("WHERE HL7DataStructures.data_structure = '"); sql.Append(dataType); sql.Append("' AND HL7Versions.hl7_version = '"); sql.Append(version); sql.Append("' ORDER BY HL7DataStructureComponents.seq_no"); System.Data.OleDb.OleDbCommand temp_OleDbCommand; temp_OleDbCommand = stmt; temp_OleDbCommand.CommandText = sql.ToString(); System.Data.OleDb.OleDbDataReader rs = temp_OleDbCommand.ExecuteReader(); System.Collections.ArrayList dataTypes = new System.Collections.ArrayList(20); System.Collections.ArrayList descriptions = new System.Collections.ArrayList(20); System.Collections.ArrayList tables = new System.Collections.ArrayList(20); System.String description = null; while (rs.Read()) { if (description == null) { description = System.Convert.ToString(rs[3 - 1]); } System.String de = System.Convert.ToString(rs[5 - 1]); System.String dt = System.Convert.ToString(rs[8 - 1]); int ta = -1; if (!rs.IsDBNull(4 - 1)) { ta = rs.GetInt32(4 - 1); } //trim all CE_x to CE if (dt != null) { if (dt.StartsWith("CE")) { dt = "CE"; } } //System.out.println("Component: " + de + " Data Type: " + dt); //for debugging dataTypes.Add(dt); descriptions.Add(de); tables.Add(ta); } if (dataType.ToUpper().Equals("TS")) { dataTypes[0] = "TSComponentOne"; } rs.Close(); stmt.Dispose(); NormativeDatabase.Instance.returnConnection(conn); //if there is only one component make a Primitive, otherwise make a Composite System.String source = null; if (dataTypes.Count == 1) { if (dataType.Equals("FT") || dataType.Equals("ST") || dataType.Equals("TX") || dataType.Equals("NM") || dataType.Equals("SI") || dataType.Equals("TN") || dataType.Equals("GTS")) { source = makePrimitive(dataType, description, version); } else { source = null; //note: IS, ID, DT, DTM, and TM are coded manually } } else if (dataTypes.Count > 1) { int numComponents = dataTypes.Count; //copy data into arrays ... System.String[] type = new System.String[numComponents]; System.String[] desc = new System.String[numComponents]; int[] table = new int[numComponents]; for (int i = 0; i < numComponents; i++) { type[i] = ((System.String)dataTypes[i]); desc[i] = ((System.String)descriptions[i]); table[i] = ((System.Int32)tables[i]); } source = makeComposite(dataType, description, type, desc, table, version); } else { //no components? //throw new DataTypeException("The data type " + dataType + " could not be found"); Console.WriteLine("No components for " + dataType); } //System.out.println(source); //write to file ... if (source != null) { System.String targetFile = targetDirectory + "/" + dataType + ".cs"; using (System.IO.StreamWriter writer = new System.IO.StreamWriter(targetFile)) { writer.Write(source); writer.Write("}"); //End namespace } } else { Console.WriteLine("No Source for " + dataType); } }
/// <summary> Returns the Java source code for a class that represents the specified segment.</summary> public static System.String makeSegment(System.String name, System.String version) { Console.WriteLine("Making segment " + name); System.Text.StringBuilder source = new System.Text.StringBuilder(); try { System.Collections.ArrayList elements = new System.Collections.ArrayList(); SegmentElement se; System.String segDesc = null; using (System.Data.OleDb.OleDbConnection conn = NormativeDatabase.Instance.Connection) { System.Text.StringBuilder sql = new System.Text.StringBuilder(); sql.Append("SELECT HL7SegmentDataElements.seg_code, HL7SegmentDataElements.seq_no, "); sql.Append("HL7SegmentDataElements.repetitional, HL7SegmentDataElements.repetitions, "); sql.Append("HL7DataElements.description, HL7DataElements.length, HL7DataElements.table_id, "); sql.Append("HL7SegmentDataElements.req_opt, HL7Segments.description, HL7DataElements.data_structure "); sql.Append("FROM HL7Versions RIGHT JOIN (HL7Segments INNER JOIN (HL7DataElements INNER JOIN HL7SegmentDataElements "); sql.Append("ON (HL7DataElements.version_id = HL7SegmentDataElements.version_id) "); sql.Append("AND (HL7DataElements.data_item = HL7SegmentDataElements.data_item)) "); sql.Append("ON (HL7Segments.version_id = HL7SegmentDataElements.version_id) "); sql.Append("AND (HL7Segments.seg_code = HL7SegmentDataElements.seg_code)) "); sql.Append("ON (HL7Versions.version_id = HL7Segments.version_id) "); sql.Append("WHERE HL7SegmentDataElements.seg_code = '"); sql.Append(name); sql.Append("' and HL7Versions.hl7_version = '"); sql.Append(version); sql.Append("' ORDER BY HL7SegmentDataElements.seg_code, HL7SegmentDataElements.seq_no;"); System.Data.OleDb.OleDbCommand stmt = SupportClass.TransactionManager.manager.CreateStatement(conn); System.Data.OleDb.OleDbCommand temp_OleDbCommand; temp_OleDbCommand = stmt; temp_OleDbCommand.CommandText = sql.ToString(); System.Data.OleDb.OleDbDataReader rs = temp_OleDbCommand.ExecuteReader(); while (rs.Read()) { if (segDesc == null) { segDesc = System.Convert.ToString(rs[9 - 1]); } se = new SegmentElement(); se.field = Convert.ToInt32(rs.GetValue(2 - 1)); se.rep = System.Convert.ToString(rs[3 - 1]); if (rs.IsDBNull(4 - 1)) { se.repetitions = 0; } else { se.repetitions = Convert.ToInt32(rs.GetValue(4 - 1)); } if (se.repetitions == 0) { if (se.rep == null || !se.rep.ToUpper().Equals("Y".ToUpper())) { se.repetitions = 1; } } se.desc = System.Convert.ToString(rs[5 - 1]); if (!rs.IsDBNull(6 - 1)) { se.length = Convert.ToInt32(rs.GetValue(6 - 1)); } se.table = Convert.ToInt32(rs.GetValue(7 - 1)); se.opt = System.Convert.ToString(rs[8 - 1]); se.type = System.Convert.ToString(rs[10 - 1]); //shorten CE_x to CE if (se.type.StartsWith("CE")) { se.type = "CE"; } elements.Add(se); /*System.out.println("Segment: " + name + " Field: " + se.field + " Rep: " + se.rep + * " Repetitions: " + se.repetitions + " Desc: " + se.desc + " Length: " + se.length + * " Table: " + se.table + " Segment Desc: " + segDesc);*/ } rs.Close(); stmt.Dispose(); NormativeDatabase.Instance.returnConnection(conn); } //write imports, class documentation, etc ... source.Append("using System;\r\n"); source.Append("using NHapi.Base;\r\n"); source.Append("using NHapi.Base.Parser;\r\n"); source.Append("using NHapi.Base.Model;\r\n"); source.Append("using "); source.Append(PackageManager.GetVersionPackageName(version)); source.Append("Datatype;\r\n"); source.Append("using NHapi.Base.Log;\r\n\r\n"); source.Append("namespace "); source.Append(PackageManager.GetVersionPackageName(version)); source.Append("Segment{\r\n\r\n"); source.Append("///<summary>\r\n"); source.Append("/// Represents an HL7 "); source.Append(name); source.Append(" message segment. \r\n"); source.Append("/// This segment has the following fields:<ol>\r\n"); for (int i = 0; i < elements.Count; i++) { se = (SegmentElement)elements[i]; source.Append("///"); source.Append("<li>"); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(": "); source.Append(se.GetDescriptionWithoutSpecialCharacters()); source.Append(" ("); source.Append(se.type); source.Append(")</li>\r\n"); } source.Append("///</ol>\r\n"); source.Append("/// The get...() methods return data from individual fields. These methods \r\n"); source.Append("/// do not throw exceptions and may therefore have to handle exceptions internally. \r\n"); source.Append("/// If an exception is handled internally, it is logged and null is returned. \r\n"); source.Append("/// This is not expected to happen - if it does happen this indicates not so much \r\n"); source.Append("/// an exceptional circumstance as a bug in the code for this class.\r\n"); source.Append("///</summary>\r\n"); source.Append("[Serializable]\r\n"); source.Append("public class "); source.Append(name); source.Append(" : AbstractSegment "); //implement interface from Model.control package if required /*Class correspondingControlInterface = Control.getInterfaceImplementedBy(name); * if (correspondingControlInterface != null) { * source.append("implements "); * source.append(correspondingControlInterface.getName()); * } */ source.Append(" {\r\n\r\n"); source.Append(" /**\r\n"); source.Append(" * Creates a "); source.Append(name); source.Append(" ("); source.Append(segDesc); source.Append(") segment object that belongs to the given \r\n"); source.Append(" * message. \r\n"); source.Append(" */\r\n"); //write constructor source.Append("\tpublic "); source.Append(name); source.Append("(IGroup parent, IModelClassFactory factory) : base(parent,factory) {\r\n"); source.Append("\tIMessage message = Message;\r\n"); if (elements.Count > 0) { source.Append(" try {\r\n"); for (int i = 0; i < elements.Count; i++) { se = (SegmentElement)elements[i]; System.String type = SourceGenerator.getAlternateType(se.type, version); source.Append(" this.add("); source.Append("typeof(" + type + ")"); // if (type.equalsIgnoreCase("Varies")) { // } else { // source.append("factory.getTypeClass(\""); // source.append(type); // source.append("\", \""); // source.append(version); // source.append("\")"); // } source.Append(", "); if (se.opt == null) { source.Append("false"); } else { if (se.opt.ToUpper().Equals("R".ToUpper())) { source.Append("true"); } else { source.Append("false"); } } source.Append(", "); source.Append(se.repetitions); source.Append(", "); source.Append(se.length); source.Append(", "); if (se.type.Equals("ID") || se.type.Equals("IS")) { source.Append("new System.Object[]{message, "); source.Append(se.table); source.Append("}"); } else { source.Append("new System.Object[]{message}"); } if (se.desc != null && se.desc.Trim().Length > 0) { source.Append(", "); source.Append("\"" + se.GetDescriptionWithoutSpecialCharacters() + "\""); } source.Append(");\r\n"); } source.Append(" } catch (HL7Exception he) {\r\n"); source.Append(" HapiLogFactory.GetHapiLog(GetType()).Error(\"Can't instantiate \" + GetType().Name, he);\r\n"); source.Append(" }\r\n"); } source.Append(" }\r\n\r\n"); //write a datatype-specific accessor for each field for (int i = 0; i < elements.Count; i++) { se = (SegmentElement)elements[i]; if (!se.desc.ToUpper().Equals("UNUSED".ToUpper())) { //some entries in 2.1 DB say "unused" System.String type = SourceGenerator.getAlternateType(se.type, version); source.Append("\t///<summary>\r\n"); source.Append("\t/// Returns "); if (se.repetitions != 1) { source.Append("a single repetition of "); } source.Append(se.GetDescriptionWithoutSpecialCharacters()); source.Append("("); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(").\r\n"); if (se.repetitions != 1) { source.Append("\t/// throws HL7Exception if the repetition number is invalid.\r\n"); source.Append("\t/// <param name=\"rep\">The repetition number (this is a repeating field)</param>\r\n"); } source.Append("\t///</summary>\r\n"); source.Append("\tpublic "); source.Append(type); source.Append(" "); source.Append(SourceGenerator.MakeAccessorName(se.desc, se.repetitions)); if (se.repetitions != 1) { source.Append("(int rep)"); } source.Append("\n\t{\r\n"); if (se.repetitions == 1) { source.Append("\t\tget{\r\n"); } source.Append("\t\t\t"); source.Append(type); source.Append(" ret = null;\r\n"); source.Append("\t\t\ttry\n\t\t\t{\r\n"); source.Append("\t\t\tIType t = this.GetField("); source.Append(se.field); source.Append(", "); if (se.repetitions == 1) { source.Append("0"); } else { source.Append("rep"); } source.Append(");\r\n"); source.Append("\t\t\t\tret = ("); source.Append(type); source.Append(")t;\r\n"); if (se.repetitions == 1) { source.Append("\t\t\t}\n\t\t\t catch (HL7Exception he) {\r\n"); source.Append("\t\t\tHapiLogFactory.GetHapiLog(GetType()).Error(\"Unexpected problem obtaining field value. This is a bug.\", he);\r\n"); source.Append("\t\t\t\tthrow new System.Exception(\"An unexpected error ocurred\", he);\r\n"); } source.Append("\t\t} catch (System.Exception ex) {\r\n"); source.Append("\t\t\tHapiLogFactory.GetHapiLog(GetType()).Error(\"Unexpected problem obtaining field value. This is a bug.\", ex);\r\n"); source.Append("\t\t\t\tthrow new System.Exception(\"An unexpected error ocurred\", ex);\r\n"); source.Append(" }\r\n"); source.Append("\t\t\treturn ret;\r\n"); if (se.repetitions == 1) { source.Append("\t}\r\n"); //End get } source.Append(" }\r\n\r\n"); //add an array accessor as well for repeating fields if (se.repetitions != 1) { source.Append(" ///<summary>\r\n"); source.Append(" /// Returns all repetitions of "); source.Append(se.GetDescriptionWithoutSpecialCharacters()); source.Append(" ("); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(").\r\n"); source.Append(" ///</summary>\r\n"); source.Append(" public "); source.Append(type); source.Append("[] Get"); source.Append(SourceGenerator.MakeAccessorName(se.desc)); source.Append("() {\r\n"); source.Append(" "); source.Append(type); source.Append("[] ret = null;\r\n"); source.Append(" try {\r\n"); source.Append(" IType[] t = this.GetField("); source.Append(se.field); source.Append("); \r\n"); source.Append(" ret = new "); source.Append(type); source.Append("[t.Length];\r\n"); source.Append(" for (int i = 0; i < ret.Length; i++) {\r\n"); source.Append(" ret[i] = ("); source.Append(type); source.Append(")t[i];\r\n"); source.Append(" }\r\n"); source.Append(" } catch (HL7Exception he) {\r\n"); source.Append(" HapiLogFactory.GetHapiLog(this.GetType()).Error(\"Unexpected problem obtaining field value. This is a bug.\", he);\r\n"); source.Append(" throw new System.Exception(\"An unexpected error ocurred\", he);\r\n"); source.Append(" } catch (System.Exception cce) {\r\n"); source.Append(" HapiLogFactory.GetHapiLog(GetType()).Error(\"Unexpected problem obtaining field value. This is a bug.\", cce);\r\n"); source.Append(" throw new System.Exception(\"An unexpected error ocurred\", cce);\r\n"); source.Append(" }\r\n"); source.Append(" return ret;\r\n"); source.Append("}\r\n\r\n"); //Add property for the total repetitions of this object source.Append(" ///<summary>\r\n"); source.Append(" /// Returns the total repetitions of "); source.Append(se.GetDescriptionWithoutSpecialCharacters()); source.Append(" ("); source.Append(name); source.Append("-"); source.Append(se.field); source.Append(").\r\n"); source.Append(" ///</summary>\r\n"); source.Append(" public int "); source.Append(SourceGenerator.MakeName(se.desc)); source.Append("RepetitionsUsed\r\n"); source.Append("{\r\n"); source.Append("get{\r\n"); source.Append(" try {\r\n"); source.Append("\treturn GetTotalFieldRepetitionsUsed(" + se.field + ");\r\n"); source.Append(" }\r\n"); source.Append("catch (HL7Exception he) {\r\n"); source.Append(" HapiLogFactory.GetHapiLog(this.GetType()).Error(\"Unexpected problem obtaining field value. This is a bug.\", he);\r\n"); source.Append(" throw new System.Exception(\"An unexpected error ocurred\", he);\r\n"); source.Append("} catch (System.Exception cce) {\r\n"); source.Append(" HapiLogFactory.GetHapiLog(GetType()).Error(\"Unexpected problem obtaining field value. This is a bug.\", cce);\r\n"); source.Append(" throw new System.Exception(\"An unexpected error ocurred\", cce);\r\n"); source.Append("}\r\n"); source.Append("}\r\n"); source.Append("}\r\n"); } } } //add adapter method code for control package if it exists //source.append(Control.getImplementation(correspondingControlInterface, version)); source.Append("\n}"); } catch (System.Data.OleDb.OleDbException sqle) { SupportClass.WriteStackTrace(sqle, Console.Error); } return(source.ToString()); }