private static string GenerateApiMethods(MFilesObject obj, Api api) { StringBuilder apiMethodStrBldr = new StringBuilder(); apiMethodStrBldr.Append(GenerateApiClassConstructorMethod(obj, api)); string ot_class_name = $"OT_{obj.Name.Normalize_to_cs_type()}"; // API Create method definition apiMethodStrBldr.AppendLine("\t\tpublic bool create(int? createdby_mfuserid = null) {"); apiMethodStrBldr.AppendLine("\t\t\treturn objVerEx.create(TypeID, createdby_mfuserid);"); apiMethodStrBldr.AppendLine("\t\t}"); // API Get method definition apiMethodStrBldr.AppendLine($"\t\tpublic static {ot_class_name} get(int objId, bool includeDeleted = false) {{"); apiMethodStrBldr.AppendLine($"\t\t\treturn APIExtensions.search<{ot_class_name}>(MFilesAPIConnection.Vault, TypeID, objId, includeDeleted);"); apiMethodStrBldr.AppendLine("\t\t}"); // API Get All method definition apiMethodStrBldr.AppendLine($"\t\tpublic static List<{ot_class_name}> getAll(bool includeDeleted = false, int searchResultsCount = 500) {{"); apiMethodStrBldr.AppendLine($"\t\t\treturn APIExtensions.getAll<{ot_class_name}>(MFilesAPIConnection.Vault, TypeID, includeDeleted, searchResultsCount);"); apiMethodStrBldr.AppendLine("\t\t}"); apiMethodStrBldr.AppendLine($"\t\tpublic static List<{ot_class_name}> search(Action<SearchParameters> parameters, int? classId = null, bool includeDeleted = false, int max_result_count=500, int search_timeout_seconds = 60) {{"); apiMethodStrBldr.AppendLine($"\t\t\treturn APIExtensions.search<{ot_class_name}>(MFilesAPIConnection.Vault, parameters, classId, includeDeleted, max_result_count, search_timeout_seconds);"); apiMethodStrBldr.AppendLine("\t\t}"); return(apiMethodStrBldr.ToString()); }
public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) { return(false); } MFilesObject that = obj as MFilesObject; return(Id == that.Id); }
private static string GenerateApiClassConstructorMethod(MFilesObject obj, Api api) { StringBuilder apiClassCnstrctrStrBldr = new StringBuilder(); Dictionary <int, List <PropertyDefinition> > classesAndRequiredPropDefs = api.PropertyDefinitions.ClassPropertyDefinitions(obj.Id); Dictionary <int, ClassType> classDefs = api.ClassTypes.ClassTypesDict; List <PropertyDefinition> reqPropDefs = null; ClassType classDef = null; foreach (KeyValuePair <int, List <PropertyDefinition> > classAndReqPropDefs in classesAndRequiredPropDefs) { reqPropDefs = classAndReqPropDefs.Value; if (reqPropDefs != null && reqPropDefs.Count() > 0) { classDef = classDefs[classAndReqPropDefs.Key]; apiClassCnstrctrStrBldr.Append($"\t\tpublic static OT_{obj.Name.Normalize_to_cs_type()} Create_{classDef.Name.Normalize_to_cs_type(true)}(\n\t\t\t"); apiClassCnstrctrStrBldr.AppendLine(string.Join(",\n\t\t\t", reqPropDefs.Select(propDef => Common.Return_type(propDef) + " " + propDef.Name.Normalize_to_cs_type(true)))); if ("Document" == obj.Name.Normalize_to_cs_type()) { apiClassCnstrctrStrBldr.AppendLine("\t\t\t\n, string fileUploadPath"); } apiClassCnstrctrStrBldr.AppendLine("\t\t\t,int? createdby_mfuserid = null"); apiClassCnstrctrStrBldr.AppendLine("\t\t) {"); apiClassCnstrctrStrBldr.AppendLine( $"\t\t\tOT_{obj.Name.Normalize_to_cs_type()} objInstance = new OT_{obj.Name.Normalize_to_cs_type()}() {{ objVerEx = new ObjVerEx(MFilesAPIConnection.Vault, new ObjectVersion(), new PropertyValues()) }};"); apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance.Class = VL_Class.{classDef.Name.Normalize_to_cs_type(true)};"); var workflow = $"Enum.TryParse(\"{classDef.WorkflowId}\", out VL_Workflow wf) == true ? wf : VL_Workflow._None_"; if (classDef.WorkflowId != 0) { apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance.Workflow = {workflow};"); } reqPropDefs.ForEach(propDef => apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance.{propDef.Name.Normalize_to_cs_type(true)} = {propDef.Name.Normalize_to_cs_type(true)};")); if ("Document" == obj.Name.Normalize_to_cs_type()) { apiClassCnstrctrStrBldr.AppendLine("\t\t\treturn objInstance.create_singlefile_doc(fileUploadPath, createdby_mfuserid);"); } else { apiClassCnstrctrStrBldr.AppendLine("\t\t\tobjInstance.create(createdby_mfuserid);"); apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance = new OT_{obj.Name.Normalize_to_cs_type()} {{ objVerEx = new ObjVerEx(objInstance.objVerEx.Vault, objInstance.objVerEx.ObjVer) }};"); apiClassCnstrctrStrBldr.AppendLine("\t\t\treturn objInstance;"); } apiClassCnstrctrStrBldr.AppendLine("\t\t}"); } } classesAndRequiredPropDefs = api.PropertyDefinitions.ClassPropertyDefinitions(obj.Id, false); foreach (KeyValuePair <int, List <PropertyDefinition> > classAndReqPropDefs in classesAndRequiredPropDefs) { reqPropDefs = classAndReqPropDefs.Value; if (reqPropDefs != null && reqPropDefs.Count() > 0) { classDef = classDefs[classAndReqPropDefs.Key]; apiClassCnstrctrStrBldr.Append($"\t\tpublic static OT_{obj.Name.Normalize_to_cs_type()} Create_{classDef.Name.Normalize_to_cs_type(true)}_Class(\n\t\t\t"); apiClassCnstrctrStrBldr.AppendLine(string.Join(",\n\t\t\t", reqPropDefs.Select(propDef => Common.Return_type(propDef) + " " + propDef.Name.Normalize_to_cs_type(true)))); if ("Document" == obj.Name.Normalize_to_cs_type()) { apiClassCnstrctrStrBldr.AppendLine("\t\t\t\n, string fileUploadPath"); } apiClassCnstrctrStrBldr.AppendLine("\t\t\t,int? createdby_mfuserid = null"); apiClassCnstrctrStrBldr.AppendLine("\t\t) {"); apiClassCnstrctrStrBldr.AppendLine($"\t\t\tOT_{obj.Name.Normalize_to_cs_type()} objInstance = new OT_{obj.Name.Normalize_to_cs_type()}() {{ objVerEx = new ObjVerEx(MFilesAPIConnection.Vault, new ObjectVersion(), new PropertyValues()) }};"); apiClassCnstrctrStrBldr.AppendLine( $"\t\t\tobjInstance.Class = VL_Class.{classDef.Name.Normalize_to_cs_type(true)};"); reqPropDefs.ForEach(propDef => apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance.{propDef.Name.Normalize_to_cs_type(true)} = {propDef.Name.Normalize_to_cs_type(true)};")); apiClassCnstrctrStrBldr.AppendLine("\t\t\tobjInstance.create(createdby_mfuserid);"); apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance = new OT_{obj.Name.Normalize_to_cs_type()} {{ objVerEx = new ObjVerEx(objInstance.objVerEx.Vault, objInstance.objVerEx.ObjVer) }};"); if ("Document" == obj.Name.Normalize_to_cs_type()) { apiClassCnstrctrStrBldr.AppendLine($"\t\t\tobjInstance.upload_file<OT_Document>(fileUploadPath);"); } apiClassCnstrctrStrBldr.AppendLine("\t\t\treturn objInstance;"); apiClassCnstrctrStrBldr.AppendLine("\t\t}"); } } return(apiClassCnstrctrStrBldr.ToString()); }
private static void GenerateDocumentOnlyPropertyDefinitions(StringBuilder sb, MFilesObject obj) { if ("Document" == obj.Name.Normalize_to_cs_type()) { sb.AppendLine("\t\tpublic bool? isTemplate {"); sb.AppendLine("\t\t\tget { return objVerEx.GetPropertyBooleanValue(PD_Is_template.id); }"); sb.AppendLine("\t\t\tset { objVerEx.SetProperty(Extensions.ConvertPropertyBoolValue(PD_Is_template.id, MFDataType.MFDatatypeBoolean, value)); }"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic void download_file(string download_path) {"); sb.AppendLine("\t\t\tAPIExtensions.download_file(MFilesAPIConnection.Vault, ID, download_path);"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic static void download_file(int object_id, string download_path) {"); sb.AppendLine("\t\t\tAPIExtensions.download_file(MFilesAPIConnection.Vault, object_id, download_path);"); sb.AppendLine("\t\t}"); sb.AppendLine($"\t\tpublic OT_{obj.Name.Normalize_to_cs_type()} upload_file(string upload_path) {{"); sb.AppendLine($"\t\t\treturn this.upload_file<OT_{obj.Name.Normalize_to_cs_type()}>(upload_path);"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic void perform_ocr() {"); sb.AppendLine("\t\t\tthis.perform_ocr();"); sb.AppendLine("\t\t}"); } }
private static string GenerateObjects(MFilesObject obj, Api api) { Dictionary <int, PropertyDefinition> .ValueCollection props = api.PropertyDefinitions.ObjectPropertyDefinitions(obj.Id).Values; StringBuilder sb = new StringBuilder(); sb.AppendLine($"\n\tpublic class OT_{obj.Name.Normalize_to_cs_type()} : IObjVerEx, IAPIOperations"); sb.AppendLine("\t{"); sb.AppendLine($"\t\tpublic const int TypeID = {obj.Id};"); sb.AppendLine("\t\tpublic int ID { get { return objVerEx.ObjID.ID; } }"); sb.AppendLine("\t\tpublic VL_Class Class {"); sb.AppendLine("\t\t\tget { return (VL_Class)Enum.ToObject(typeof(VL_Class), objVerEx.Class); }"); sb.AppendLine("\t\t\tset { objVerEx.SetProperty(PD_Class.id, PD_Class.data_type, value); }"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic ObjVerEx objVerEx { get; set; }"); sb.AppendLine("\t\tDictionary<int,object> _object_properties_cache = new Dictionary<int,object>();"); sb.AppendLine("\t\tDictionary<int, object> IObjVerEx.object_properties_cache {"); sb.AppendLine("\t\t\tget { return _object_properties_cache; }"); sb.AppendLine("\t\t\tset { _object_properties_cache = value; }"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic bool IsDeleted { get { return objVerEx.Deleted(); } }"); sb.AppendLine("\t\tpublic bool IsDestroyed { get { return objVerEx.IsDestroyed; } }"); sb.AppendLine("\t\tpublic bool IsExternal {"); sb.AppendLine("\t\t\tget {"); sb.AppendLine("\t\t\t\tObjType objType = objVerEx.Vault.ObjectTypeOperations.GetObjectType(TypeID);"); sb.AppendLine("\t\t\t\treturn objType.External;"); sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic DateTime CreatedDate {"); sb.AppendLine("\t\t\tget { return objVerEx.GetProperyDateTimeValue(PD_Created.id); }"); sb.AppendLine("\t\t}"); GenerateDocumentOnlyPropertyDefinitions(sb, obj); sb.AppendLine("\t\tpublic VL_NACLs? NamedACL {"); sb.AppendLine("\t\t\tget {"); sb.AppendLine("\t\t\t\tif (objVerEx.Permissions.NamedACL.NamedACLType == MFNamedACLType.MFNamedACLTypeNone) return null;"); sb.AppendLine("\t\t\t\treturn (VL_NACLs)Enum.ToObject(typeof(VL_NACLs), objVerEx.Permissions.NamedACL.ID);"); sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t\tset { this.SetNamedACL(value); }"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic AccessControlList CustomACL {"); sb.AppendLine("\t\t\tget {"); sb.AppendLine("\t\t\t\tif (!HasCustomACL) return null;"); sb.AppendLine("\t\t\t\treturn objVerEx.Permissions.AccessControlList;"); sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t\tset { this.SetAccessControlList(value); }"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic bool HasCustomACL => objVerEx.Permissions.CustomACL;"); sb.AppendLine($"\t\tpublic OT_{obj.Name.Normalize_to_cs_type()} PreviousVersion {{"); sb.AppendLine("\t\t\tget {"); sb.AppendLine("\t\t\t\tif (objVerEx == null || objVerEx.PreviousVersion == null)"); sb.AppendLine("\t\t\t\t\treturn null;"); sb.AppendLine("\t\t\t\tif (objVerEx.Version == 1)"); sb.AppendLine("\t\t\t\t\treturn this;"); sb.AppendLine($"\t\t\t\treturn new OT_{obj.Name.Normalize_to_cs_type()}() {{ objVerEx = objVerEx.PreviousVersion }};"); sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t}"); sb.AppendLine($"\t\tpublic OT_{obj.Name.Normalize_to_cs_type()}() {{ }}"); sb.AppendLine("\t\tpublic override bool Equals(object obj)"); sb.AppendLine("\t\t{"); sb.AppendLine("\t\t\tif (obj == null)"); sb.AppendLine("\t\t\t\treturn false;"); sb.AppendLine($"\t\t\tOT_{obj.Name.Normalize_to_cs_type()} that = obj as OT_{obj.Name.Normalize_to_cs_type()};"); sb.AppendLine("\t\t\treturn ID == that.ID;"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic override int GetHashCode() {"); sb.AppendLine("\t\t\treturn ID;"); sb.AppendLine("\t\t}"); sb.AppendLine($"\t\tpublic static bool operator ==(OT_{obj.Name.Normalize_to_cs_type()} lhs, OT_{obj.Name.Normalize_to_cs_type()} rhs) {{"); sb.AppendLine("\t\t\tif (object.ReferenceEquals(lhs, null))"); sb.AppendLine("\t\t\t\treturn object.ReferenceEquals(rhs, null);"); sb.AppendLine("\t\t\treturn lhs.Equals(rhs);"); sb.AppendLine("\t\t}"); sb.AppendLine($"\t\tpublic static bool operator !=(OT_{obj.Name.Normalize_to_cs_type()} lhs, OT_{obj.Name.Normalize_to_cs_type()} rhs) {{"); sb.AppendLine("\t\t\treturn !(lhs==rhs);"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic void Refresh() {"); sb.AppendLine("\t\t\tthis.ClearAllCachedProperties();"); sb.AppendLine("\t\t\tobjVerEx.Refresh();"); sb.AppendLine("\t\t}"); sb.AppendLine($"\t\tpublic static List<OT_{obj.Name.Normalize_to_cs_type()}> indirect(IObjVerEx obj)"); sb.AppendLine("\t\t{"); sb.AppendLine("\t\t\tif (obj == null || obj.objVerEx == null || obj.objVerEx.Deleted())"); sb.AppendLine($"\t\t\t\treturn new List<OT_{obj.Name.Normalize_to_cs_type()}>();"); sb.AppendLine($"\t\t\treturn obj.objVerEx.GetIndirectReferenceByObject<OT_{obj.Name.Normalize_to_cs_type()}>(TypeID);"); sb.AppendLine("\t\t}"); sb.AppendLine("\t\tpublic void save_properties() {"); sb.AppendLine($"\t\t\tobjVerEx.SaveProperties();"); sb.Append("\t\t}\n"); sb.AppendLine("\t\tpublic int VersionNumber {"); sb.AppendLine("\t\t\tget {"); sb.AppendLine("\t\t\t\t return objVerEx.Version;"); sb.AppendLine("\t\t\t}"); sb.Append("\t\t}\n"); bool multiselect_object_property = false; bool singleselect_object_property = false; foreach (PropertyDefinition prop in props) { multiselect_object_property = prop.DataType == MFDataType.MFDatatypeMultiSelectLookup && !prop.IsBasedOnValueList; singleselect_object_property = prop.DataType == MFDataType.MFDatatypeLookup && !prop.IsBasedOnValueList; var property_type = Common.Return_type(prop); var property_name = prop.Name.Normalize_to_cs_type(); if (multiselect_object_property) { property_type = $"MultiSelectOTProperty<OT_{prop.ValueListName.Normalize_to_cs_type()}>"; } sb.AppendLine($"\t\tpublic {property_type} {prop.Name.Normalize_to_cs_type(true)} {{"); sb.AppendLine($"\t\t\tget {{ return {Common.Method_name(prop)}(PD_{property_name}.id); }}"); sb.AppendLine("\t\t\tset {"); if (multiselect_object_property) { sb.AppendLine($"\t\t\t\tthis.SetMultiSelectLookupValueForPropertyDefCache<OT_{prop.ValueListName.Normalize_to_cs_type(true)}>(PD_{property_name}.id, value);"); } else { if (singleselect_object_property) { sb.AppendLine($"\t\t\t\tthis.CacheProperty(PD_{property_name}.id, value);"); } sb.AppendLine($"\t\t\t\tobjVerEx.SetProperty(Extensions.{Common.Convert_method(prop)}(PD_{property_name}.id, PD_{property_name}.data_type, value));"); } sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t}"); if (prop.IsBasedOnValueList && prop.DataType != MFDataType.MFDatatypeBoolean) { sb.Append($"\t\tpublic string {prop.Name.Normalize_to_cs_type(true)}_name => "); var index = prop.DataType == MFDataType.MFDatatypeMultiSelectLookup ? "[0]" : ""; sb.Append($"Extensions.GetEnumDescription({Common.Method_name(prop)}(PD_{property_name}.id){index}) "); sb.Append($"?? objVerEx.GetValueListItemFromVault(PD_{property_name}.id, \"{prop.ValueListName.Normalize_to_cs_type()}\");"); sb.AppendLine("\t\t"); } } sb.Append(GenerateApiMethods(obj, api)); sb.Append("\t}"); return(sb.ToString()); }