whyclj
2021-01-05 64aba412c2b739d67795b14a3cae069d311697f9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.intelligt.modbus.jlibmodbus.serial;
 
import com.intelligt.modbus.jlibmodbus.Modbus;
 
import java.lang.reflect.InvocationTargetException;
 
public class ValidatorSerialPortFactory implements Comparable<ValidatorSerialPortFactory> {
    final private String factoryClassname;
    final private String connectorClassname;
 
    public ValidatorSerialPortFactory(String connectorClassname, String factoryClassname) {
        this.factoryClassname = factoryClassname;
        this.connectorClassname = connectorClassname;
    }
 
    public String getFactoryClassname() {
        return factoryClassname;
    }
 
    public String getConnectorClassname() {
        return connectorClassname;
    }
 
    public boolean validate() {
        try {
            Class.forName(getConnectorClassname());
            return true;
        } catch (ClassNotFoundException e) {
            return false;
        }
    }
 
    public SerialPortAbstractFactory getFactory() throws ClassNotFoundException {
        if (validate()) {
            try {
                Class factoryClass = Class.forName(getFactoryClassname());
                Object o = factoryClass.getConstructors()[0].newInstance();
                if (o instanceof SerialPortAbstractFactory) {
                    return (SerialPortAbstractFactory) o;
                }
            } catch (Exception e) {
                Modbus.log().warning("Invalid implementation of " + getFactoryClassname());
            }
        }
        throw new ClassNotFoundException();
    }
 
    @Override
    public int compareTo(ValidatorSerialPortFactory o) {
        return this.equals(o) ? 0 : 1;
    }
}