public DynamicDatatypeLibraryFactory(string dir, string mask) { string[] fileNames = Directory.GetFiles(dir, mask); plugins = new DatatypeLibraryFactory[fileNames.Length]; int idx = 0; // load assembly files foreach (string name in fileNames) { try { AssemblyName n = new AssemblyName(); n.CodeBase = name; Assembly a = Assembly.Load(n); plugins[idx++] = (DatatypeLibraryFactory)Activator.CreateInstance( a.GetType("DatatypeLibraryFactoryImpl")); } catch (Exception) {} // ignore this plug-in and proceed to next } }
private static Datatype[] createDatatypes( DatatypeLibraryFactory factory, object[] encodedDatatypes ) { Datatype[] datatypes = new Datatype[encodedDatatypes.Length/3]; for( int i=0; i<datatypes.Length; i++ ) { datatypes[i] = createDatatype( factory, (string)encodedDatatypes[i*3], (string)encodedDatatypes[i*3+1], (object[])encodedDatatypes[i*3+2] ); } return datatypes; }
private static Datatype createDatatype( DatatypeLibraryFactory factory, string nsUri, string localName, object[] parameters) { if( nsUri.Length==0 ) { // since those parameters were compiled, we don't need to check the error. if( localName[0]=='t' ) return TokenType.theInstance; else return StringType.theInstance; } DatatypeLibrary lib = factory.CreateDatatypeLibrary(nsUri); if(lib==null) throw new DatatypeException("unable to locate a datatype library for "+nsUri); DatatypeBuilder builder = lib.CreateDatatypeBuilder(localName); for( int i=0; i<parameters.Length; i+=3 ) { ValidationContext context = createContext( (string[])parameters[i+2] ); builder.AddParameter( (string)parameters[i], (string)parameters[i+1], context ); } return builder.CreateDatatype(); }
public Schema( string nameLiterals, int defaultNameCode, string encStates, string encATr, string encDTr, string encETr, string encITr, string encLTr, string encNTr, string encVTr, object[] encDatatypes, object[] values, DatatypeLibraryFactory datatypeFactory) : this(nameLiterals, defaultNameCode, encStates, encATr, encDTr, encETr, encITr, encLTr, encNTr, encVTr, createDatatypes( datatypeFactory, encDatatypes ), values) { }