2017-02-03 2 views
0

Ich habe mehrere XML-Dateien, die später meine GUI-Darstellung mit Java/gwt definieren. zum Beispiel:Füll-Attribut-Werte in XML-Datei von Java Enum-Werte

<?xml version="1.0" encoding="UTF-8"?> 
    <master> 
     <search-field>ExternalIdentifier</search-field> 
     <search-field>Name</search-field> 
     <attribute allowDisableSearchId="MasterExternalIdentifier">ExternalIdentifier</attribute> 
     <attribute allowDisableSearchId="MasterName">Name</attribute> 
    </master> 

In diesem speziellen Fall, dass ich dem Benutzer die Möglichkeit geben möchte, die Suche nach bestimmten Spalten von Kontrollkästchen de/aktivieren. Um diese Felder zu identifizieren, möchte ich ihnen eine eindeutige Kennung geben (hier mit dem Attribut allowDisableSearchId). Mit dieser ID ist es möglich, diese Checkbox vorzuwählen (oder auch nicht auszuwählen).

Das Problem ist, wenn ich die Namen, die ich beaufsichtige, festlegen, dass der eindeutige Name bereits in anderen Dateien vergeben wird. Zusätzlich, wenn ich einen Überblick geben möchte, welche eindeutigen IDs existieren (zum Beispiel um Präferenzen zu setzen), muss ich alle xml-Dateien nach diesem Attribut durchsuchen.

Jetzt frage ich mich, ob es eine solche Technik gibt, wie ich eine enum in Java definiere und setze die Werte durch die enum-Werte. zum Beispiel Enum:

public enum ALLOWDISABLESEARCHID { 
    MasterExternalIdentifier, 
    MasterName 
} 

und dann in XML verwendet

<?xml version="1.0" encoding="UTF-8"?> 
    <master> 
     <search-field>ExternalIdentifier</search-field> 
     <search-field>Name</search-field> 
     <attribute allowDisableSearchId="ALLOWDISABLESEARCHID.MasterExternalIdentifier">ExternalIdentifier</attribute> 
     <attribute allowDisableSearchId="ALLOWDISABLESEARCHID.MasterName">Name</attribute> 
    </master> 

Damit kann ich sicher sein, es ist einzigartig und später in Java-Code, um sie verweisen kann.

Oder gibt es einige andere Techniken, die ich verwenden kann?

+0

Die Idee mit der Enum wird keine Eindeutigkeit behaupten. Ich würde einen Test schreiben, der jedes xml unter /src/main/resources/.../ liest und alle Attributwerte analysiert. Der Test sollte eine Ausnahme auslösen, wenn eine allowDisableSearchId mehr als einmal verwendet wird. –

Antwort

1

Die Idee mit der Enum wird keine Eindeutigkeit behaupten. Ich würde einen Test schreiben, der jedes xml unter /src/main/resources/.../ liest und alle Attributwerte analysiert. Der Test sollte eine Ausnahme auslösen, wenn eine `allowDisableSearchId 'mehr als einmal verwendet wird.

package stackoverflow; 

import static java.util.Arrays.asList; 
import static java.util.Collections.singletonList; 

import java.io.InputStream; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

import org.junit.Test; 

public class FindDuplicateId 
{ 
    @Test 
    public void idsAreUnique() throws Exception 
    { 
     final Set<String> ids = new HashSet<>(); 
     for (final InputStream xml : findAllXml()) 
     { 
      for (final String id : readIds(xml)) 
      { 
       if (!ids.add(id)) 
       { 
        throw new IllegalStateException("Duplicate ID " + id); 
       } 
      } 
     } 
    } 

    List<InputStream> findAllXml() 
    { 
     // TODO implement correct 
     return singletonList(this.getClass() 
           .getResourceAsStream("a.xml")); 
    } 

    List<String> readIds(final InputStream xml) 
    { 
     // TODO implement correct 
     return asList("MasterExternalIdentifier", "MasterName", "MasterExternalIdentifier"); 
    } 
}