11package controller ;
22
3+ import javafx .beans .property .BooleanProperty ;
4+ import javafx .beans .property .SimpleBooleanProperty ;
35import javafx .fxml .FXML ;
6+ import javafx .fxml .Initializable ;
47import javafx .scene .control .Button ;
58import javafx .scene .control .TextArea ;
69import javafx .scene .control .TextField ;
710import javafx .stage .Stage ;
811
12+ import java .net .URL ;
913import java .util .ArrayList ;
1014import java .util .Arrays ;
15+ import java .util .ResourceBundle ;
1116
12- public class OntologyClassDialogController extends AbstractDataSharingController <String > {
17+ public class OntologyClassDialogController extends AbstractDataSharingController <String > implements Initializable {
1318 @ FXML Button cmtBtn , cancelBtn ;
14- @ FXML TextField nameTfd , labelTfd ;
19+ @ FXML TextField typeTfd , nameTfd , labelTfd ;
1520 @ FXML TextArea commentTxa ;
1621
22+ private final BooleanProperty isClasslike = new SimpleBooleanProperty (false );
23+ private final BooleanProperty isLiterallike = new SimpleBooleanProperty (false );
24+
1725 private ArrayList <String > commit_data = new ArrayList <>();
1826
27+ @ Override
28+ public void initialize (URL location , ResourceBundle resources ) {
29+ final String stringLitRegex = "\" .+\" " ;
30+ final String otherLitRegex = "\" .+\" \\ ^\\ ^.*" ;
31+ final String langLitRegex = "\" .+\" @.*" ;
32+ final String instanceLitRegex = "(?<!\" )[^:]*(?!\" )" ;
33+ final String booleanLitRegex = "true|false" ;
34+ final String integerLitRegex = "[+\\ -]?\\ d+" ;
35+ final String decimalLitRegex = "[+\\ -]?\\ d*\\ .\\ d+" ;
36+ final String doubleLitRegex = "([+\\ -]?\\ d+\\ .\\ d+|[+\\ -]?\\ .\\ d+|[+\\ -]?\\ d+)[Ee][+\\ -]\\ d+" ;
37+
38+ final String literalRegex = stringLitRegex + "|" + otherLitRegex + "|" + langLitRegex + "|" +
39+ instanceLitRegex + "|" + booleanLitRegex + "|" + integerLitRegex + "|" + decimalLitRegex + "|" +
40+ doubleLitRegex ;
41+ final String classRegex = "([a-z]*:[^\" ]*)?" ;
42+
43+ nameTfd .textProperty ().addListener (((observable , oldValue , newValue ) -> {
44+ if (newValue .matches (classRegex )){
45+ isClasslike .setValue (true );
46+ isLiterallike .setValue (false );
47+ } else if (newValue .matches (literalRegex )){
48+ isClasslike .setValue (false );
49+ isLiterallike .setValue (true );
50+ if (newValue .matches (stringLitRegex + "|" + langLitRegex )) typeTfd .setText ("xsd:string" );
51+ else if (newValue .matches (booleanLitRegex )) typeTfd .setText ("xsd:boolean" );
52+ else if (newValue .matches (integerLitRegex )) typeTfd .setText ("xsd:integer" );
53+ else if (newValue .matches (decimalLitRegex )) typeTfd .setText ("xsd:decimal" );
54+ else if (newValue .matches (doubleLitRegex )) typeTfd .setText ("xsd:double" );
55+ else if (newValue .matches (otherLitRegex )) {
56+ final String [] otherParts = newValue .split ("\\ ^\\ ^" );
57+ typeTfd .setText (otherParts .length > 1 ? otherParts [1 ] : "" );
58+ } else typeTfd .setText ("" );
59+ } else {
60+ isClasslike .setValue (false );
61+ isLiterallike .setValue (false );
62+ }
63+ }));
64+
65+ isClasslike .addListener (((observable , oldValue , newValue ) -> {
66+ if (observable .getValue ().booleanValue ()){
67+ labelTfd .setDisable (false );
68+ commentTxa .setDisable (false );
69+ } else {
70+ labelTfd .setDisable (true );
71+ commentTxa .setDisable (true );
72+ labelTfd .setText ("" );
73+ commentTxa .setText ("" );
74+ }
75+ }));
76+
77+ isLiterallike .addListener (((observable , oldValue , newValue ) -> {
78+ if (observable .getValue ().booleanValue ()) typeTfd .setDisable (false );
79+ else {
80+ typeTfd .setDisable (true );
81+ typeTfd .setText ("" );
82+ }
83+ }));
84+ }
85+
1986 @ Override
2087 public void setData (ArrayList <String > data ) {}
2188
@@ -25,7 +92,7 @@ public ArrayList<String> getData() {
2592 }
2693
2794 @ FXML void addNewClassAction () {
28- commit_data .addAll (Arrays .asList (nameTfd .getText (), labelTfd .getText (), commentTxa .getText ()));
95+ commit_data .addAll (Arrays .asList (nameTfd .getText (), typeTfd . getText (), labelTfd .getText (), commentTxa .getText ()));
2996 Stage stage = (Stage ) cmtBtn .getScene ().getWindow ();
3097 stage .close ();
3198 }
0 commit comments