Как я могу ввести значение XML в методы интерфейса Java - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно внедрить значения из XML-файла в мой Java-код, используя механизм отражения, в настоящее время я реализовал механизм синтаксического анализа XML-кода следующим образом:

 protected Map<String, BasicElement> container = new HashMap<String, BasicElement();
    // contain element instances that appears at xml file

для каждого класса I есть отдельный XML-файл, который определяет значения класса.

вот пример:

Java-класс

public class MerchandiseDesignDialog extends EntityDesignDialog {


    private TextField model;
    private TextField name;
    private TextField description;
    private DropDownList attribute_1;
    private DropDownList attribute_2;
    private DropDownList attribute_3;
    private DropDownList attribute_4;



    private final static String NAME = "Name";
    private final static String DESCRIPTION = "Description";
    private final static String ATTRIBUE_1 = "Attribute (1)";
    private final static String ATTRIBUE_2= "Attribute (2)";
    private final static String ATTRIBUE_3 = "Attribute (3)";
    private final static String ATTRIBUE_4 = "Attribute (4)";

    private static final String XML_FILE_NAME = "/src/main/java/com/merchandiseDesignDialog.xml";



    @Override
    protected void initInnerElements() {
        try {

            this.name = (TextField)container.get(NAME);
            this.description = (TextField) container.get(DESCRIPTION);
            this.attribute_1 = (DropDownList)container.get(ATTRIBUE_1);
            this.attribute_2 = (DropDownList)container.get(ATTRIBUE_2);
            this.attribute_3 = (DropDownList)container.get(ATTRIBUE_3);
            this.attribute_4 = (DropDownList)container.get(ATTRIBUE_4);
        } catch (ClassCastException e) {
            report.reportStatus(this.getClass().getName() + " : initializing elements failed ", Status.FAIL);
        }
    }


    public TextField getName() {
        this.find();
        name.find(this);
        return name;
    }

    public TextField getDescription() {
        this.find();
        description.find(this);
        return description;
    }

    public DropDownList getAttribute_1() {
        this.find();
        attribute_1.find(this);
        return attribute_1;
    }

    public DropDownList getAttribute_2() {
        this.find();
        attribute_2.find(this);
        return attribute_2;
    }

    public DropDownList getAttribute_3() {
        this.find();
        attribute_3.find(this);
        return attribute_3;
    }

    public DropDownList getAttribute_4() {
        this.find();
        attribute_4.find(this);
        return attribute_4;
    }


    /**********************************************************
     * ********************************************************
     ***********************************************************/
    public MerchandiseDesignDialog setName(String nameValue) {
        getName().insert(nameValue);
        return this;
    }

    public MerchandiseDesignDialog setDescription(String descriptionValue) {
        getDescription().insert(descriptionValue);
        return this;
    }


    public MerchandiseDesignDialog selectAttribute_1(String attribute_1Val) throws NoSuchElementException {
        getAttribute_1().select(attribute_1Val);
        return this;
    }

    public MerchandiseDesignDialog selectAttribute_2(String attribute_2Val) throws NoSuchElementException {
       getAttribute_2().select(attribute_2Val);
        return this;
    }

    public MerchandiseDesignDialog selectAttribute_3(String attribute_3Val) throws NoSuchElementException {
        getAttribute_3().select(attribute_3Val);
        return this;
    }

    public MerchandiseDesignDialog selectAttribute_4(String attribute_4Val) throws NoSuchElementException {
        getAttribute_4().select(attribute_4Val);
        return this;
    }

}

обнаруженный XML-файл

<ComplexElement type="WorkSpace"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="C:/Users/Ali/Downloads/ElementsTutorial/complex_element.xsd">




    <UIBasicElement type="textField" locatorType="name" locator="name" visibleName="Name"/>
    <UIBasicElement type="textField" locatorType="name" locator="description" visibleName="Description"/>



    <!-- ***************************************************************************  -->
    <UIBasicElement type="dropdown" locatorType="name" locator="attribute1TypeId" visibleName="Attribute (1)"/>


    <!-- ***************************************************************************  -->
    <UIBasicElement type="dropdown" locatorType="name" locator="attribute2TypeId" visibleName="Attribute (2)"/>

    <!-- ***************************************************************************  -->
    <UIBasicElement type="dropdown" locatorType="name" locator="attribute3TypeId" visibleName="Attribute (3)"/>


    <!-- ***************************************************************************  -->
    <UIBasicElement type="dropdown" locatorType="name" locator="attribute4TypeId" visibleName="Attribute (4)"/>



</ComplexElement>

объяснение кода, Контейнер включает в себя все содержимое файла XML, каждый элемент XML имеет экземпляр Java. в каждом классе от меня следует реализовать следующее:

  1. Метод initInnerElements (), который инициирует каждое поле класса, получая его из контейнера.

  2. get метод, вызовите методы find перед возвратом каждого поля.

  3. и метод операции. Метод get invoke и выполнение операции.

после описания текущего статуса, вот Вопрос:

Как я могу реализовать тот же код, используя следующую структуру кода:

@Page(path = "/src/main/java/com/merchandiseDesignDialog.xml")
public interface IMerchandiseDesignDialog {

    @Entity(visibileName = "Name")
    public TextField getName();

    @Entity(visibileName = "Description")
    public TextField getDescription() ;

    @Entity(visibileName = "Attribute (1)")
    public DropDownList getAttribute_1() ;

    @Entity(visibileName = "Attribute (2)")
    public DropDownList getAttribute_2();

    @Entity(visibileName = "Attribute (3)")
    public DropDownList getAttribute_3() ;

    @Entity(visibileName = "Attribute (4)")
    public DropDownList getAttribute_4() ;



    /**********************************************************
     * ********************************************************
     ***********************************************************/
    public IMerchandiseDesignDialog setName(String nameValue);

    public IMerchandiseDesignDialog setDescription(String descriptionValue);

    public IMerchandiseDesignDialog selectAttribute_1(String attribute_1Val) throws NoSuchElementException ;

    public IMerchandiseDesignDialog selectAttribute_2(String attribute_2Val) throws NoSuchElementException ;

    public IMerchandiseDesignDialog selectAttribute_3(String attribute_3Val) throws NoSuchElementException ;

    public IMerchandiseDesignDialog selectAttribute_4(String attribute_4Val) throws NoSuchElementException ;


}

И кое-что, как происходит волшебство в коде демона, что мне не нужно писать в каждом классе снова и снова. Мне нужно заменить этот класс MerchandiseDesignDialog и использовать интерфейс, который описывает только методы с аннотациями. Я знаю, что Java-отражение - правильный путь, но я не знаю, как его реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...