Skip to content

Commit 666d9ad

Browse files
authored
Merge pull request #3246 from katysaintin/master
Improve boolean and enum pv managment in pvtable and open Web Page Management
2 parents 75a6a3d + c48fa1b commit 666d9ad

File tree

9 files changed

+203
-97
lines changed

9 files changed

+203
-97
lines changed

app/display/model/src/main/java/org/csstudio/display/builder/model/util/ModelResourceUtil.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ private static String URLdecode(final String text)
258258
}
259259
catch (UnsupportedEncodingException ex)
260260
{
261+
logger.log(Level.SEVERE, "Impossible to decode {0} because {1}", new Object[] { text, ex.getMessage() });
261262
return text;
262263
}
263264
}
@@ -299,6 +300,7 @@ private static String doResolveResource(final String parent_display, final Strin
299300
}
300301

301302
// Give up
303+
logger.log(Level.WARNING, " {0} is not resolved ", new Object[] { resource_name});
302304
return null;
303305
}
304306

@@ -319,12 +321,15 @@ private static boolean canOpenUrl(final String resource_name)
319321
}
320322
catch (Exception ex)
321323
{
324+
logger.log(Level.SEVERE, "Impossible to open stream on {0} because of {1}", new Object[] { resource_name, ex.getMessage() });
322325
return false;
323326
}
324327
}
325328

326-
if (! isURL(resource_name))
329+
if (! isURL(resource_name)) {
330+
logger.log(Level.WARNING, "URL {0} is not a URL", new Object[] { resource_name });
327331
return false;
332+
}
328333
// This implementation is expensive:
329334
// On success, caller will soon open the URL again.
330335
// In practice, not too bad because second time around
@@ -344,12 +349,17 @@ private static boolean canOpenUrl(final String resource_name)
344349

345350
try
346351
{
347-
final InputStream stream = openURL(resource_name);
348-
stream.close();
352+
// final InputStream stream = openURL(resource_name);
353+
// stream.close();
354+
//Test only if the page exist and not read the content
355+
final String escaped = resource_name.replace(" ", "%20");
356+
URL resource = new URL(escaped);
357+
resource.openConnection();
349358
return true;
350359
}
351360
catch (Exception ex)
352361
{
362+
logger.log(Level.SEVERE, "Impossible to open connection on URL {0} because of {1}", new Object[] { resource_name, ex.getMessage() });
353363
return false;
354364
}
355365
}
@@ -397,7 +407,7 @@ public static File getFile(final URI resource) throws Exception
397407
// .. but once examples are inside the jar,
398408
// we can only read them as a stream.
399409
// There is no File access.
400-
logger.log(Level.WARNING, "Cannot get `File` for " + url);
410+
logger.log(Level.WARNING, "Cannot get `File` for " + url + " " + ex.getMessage());
401411
return null;
402412
}
403413
}
@@ -488,7 +498,6 @@ public static InputStream openURL(final String resource_name) throws Exception
488498

489499
private static final byte[] readUrl(final String url) throws Exception
490500
{
491-
// System.out.println("Actually reading " + url + ", not cached");
492501
final InputStream in = openURL(url, timeout_ms);
493502
final ByteArrayOutputStream buf = new ByteArrayOutputStream();
494503
IOUtils.copy(in, buf);

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/Messages.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ public class Messages
130130
ShowErrorDialogTitle,
131131
ShowMessageDialogTitle,
132132
ShowSaveAsDialogTitle,
133+
WebPageErrorDetails,
134+
WebPageErrorLoading,
135+
WebPageErrorMessage,
133136
WidgetColorPopOver_Alpha,
134137
WidgetColorPopOver_Blue,
135138
WidgetColorPopOver_Color,

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/WebBrowserRepresentation.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.csstudio.display.builder.model.WidgetPropertyListener;
1919
import org.csstudio.display.builder.model.util.ModelResourceUtil;
2020
import org.csstudio.display.builder.model.widgets.WebBrowserWidget;
21+
import org.csstudio.display.builder.representation.javafx.Messages;
2122
import org.phoebus.framework.jobs.JobManager;
2223
import org.phoebus.framework.util.IOUtils;
2324
import org.phoebus.ui.javafx.ImageCache;
@@ -102,7 +103,22 @@ protected void goToURL(String url)
102103
// still defaulting to "http://".
103104
else if (url.indexOf("://") < 0)
104105
url = "http://" + url;
105-
webEngine.load(url);
106+
107+
//Try to open page to test if we can open page
108+
try {
109+
InputStream openURL = ModelResourceUtil.openURL(url, 0);
110+
openURL.close();
111+
webEngine.load(url);
112+
}
113+
catch (Exception e) {
114+
//if there is an error display a error page in engine
115+
StringBuilder errorMessage = new StringBuilder();
116+
errorMessage.append("<u style=\"color:red;\">"+Messages.WebPageErrorLoading+" :</u><BR>");
117+
errorMessage.append("<a href=" + url + " target=\"_blank\">"+url+"</a><BR>");
118+
errorMessage.append("<u>"+Messages.WebPageErrorMessage+" :</u> " + e.getMessage() + "<BR>");
119+
errorMessage.append("<u>"+Messages.WebPageErrorDetails+" :</u> " + e.toString());
120+
webEngine.loadContent(errorMessage.toString());
121+
}
106122
}
107123

108124
private void download(final String url, final String file)

app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ ShowConfirmationDialogTitle=Please Confirm
120120
ShowErrorDialogTitle=Error
121121
ShowMessageDialogTitle=Message
122122
ShowSaveAsDialogTitle=Save As
123+
WebPageErrorDetails=Error details
124+
WebPageErrorLoading=Error when loading page
125+
WebPageErrorMessage=Error message
123126
WidgetColorPopOver_Hex=Hex Value:
124127
WidgetColorPopOver_Alpha=Alpha:
125128
WidgetColorPopOver_Blue=Blue:

app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages_fr.properties

Lines changed: 59 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,58 @@ ActionButton_N_ActionsAsOneFmt={0} actions
22
ActionButton_N_ActionsFmt=Choisissez 1 parmi {0}
33
ActionButton_NoActions=VIDE
44
ActionsDialog_Actions=Actions :
5-
ActionsDialog_Detail=Détail de l’action :
5+
ActionsDialog_Detail=D\u00E9tail de l’action :
66
ActionsDialog_DisplayPath=Chemin de l’affichage :
7-
ActionsDialog_ExecuteAll=Exécuter toutes les actions en une seule fois
7+
ActionsDialog_ExecuteAll=Ex\u00E9cuter toutes les actions en une seule fois
88
ActionsDialog_FilePath=Chemin du fichier :
9-
ActionsDialog_Info=Configurer les actions qui ouvrent des affichages, écrivent des PV, etc.
9+
ActionsDialog_Info=Configurer les actions qui ouvrent des affichages, \u00E9crivent des PV, etc.
1010
ActionsDialog_PVName=Nom du PV :
1111
ActionsDialog_ScriptPath=Fichier de script :
12-
ActionsDialog_ScriptText=Texte du script intégré :
12+
ActionsDialog_ScriptText=Texte du script int\u00E9gr\u00E9 :
1313
ActionsDialog_Title=Actions
1414
Add=Ajouter
15-
AddEmbeddedJavaScript=Ajouter JavaScript intégré\u2026
16-
AddEmbeddedPython=Ajouter Python intégré\u2026
15+
AddEmbeddedJavaScript=Ajouter JavaScript int\u00E9gr\u00E9\u2026
16+
AddEmbeddedPython=Ajouter Python int\u00E9gr\u00E9\u2026
1717
AddJavaScriptFile=Ajouter un fichier JavaScript
1818
AddPythonFile=Ajouter un fichier Python
1919
Alpha=Alpha
2020
Blue=Bleu
2121
BoolButtonError_Body=Le dialogue de confirmation est pris en charge uniquement pour le mode toggle.
2222
BoolButtonError_Title=Configuration non prise en charge
2323
ColorDialog_Current=Actuel
24-
ColorDialog_Custom=Couleur personnalisée
25-
ColorDialog_Default=Défaut
26-
ColorDialog_Info=Séléctionnez une couleur prédéfinie, ou une couleur personnalisée
24+
ColorDialog_Custom=Couleur personnalis\u00E9e
25+
ColorDialog_Default=D\u00E9faut
26+
ColorDialog_Info=S\u00E9l\u00E9ctionnez une couleur pr\u00E9d\u00E9finie, ou une couleur personnalis\u00E9e
2727
ColorDialog_Original=Original
28-
ColorDialog_Predefined=Couleurs prédéfinies
28+
ColorDialog_Predefined=Couleurs pr\u00E9d\u00E9finies
2929
ColorDialog_Title_FMT=Choisir {0}
30-
ColorMap_Custom=Carte de couleurs personnalisée
30+
ColorMap_Custom=Carte de couleurs personnalis\u00E9e
3131
ColorMapDialog_Add=Ajouter une couleur
3232
ColorMapDialog_Color=Couleur
33-
ColorMapDialog_Info=Séléctionnez une carte de couleurs prédéfinie. Optionnellement, personnalisez-la.
34-
ColorMapDialog_PredefinedMap=Carte de couleurs prédéfinie
33+
ColorMapDialog_Info=S\u00E9l\u00E9ctionnez une carte de couleurs pr\u00E9d\u00E9finie. Optionnellement, personnalisez-la.
34+
ColorMapDialog_PredefinedMap=Carte de couleurs pr\u00E9d\u00E9finie
3535
ColorMapDialog_Remove=Supprimer la couleur
36-
ColorMapDialog_Result=Résultat
36+
ColorMapDialog_Result=R\u00E9sultat
3737
ColorMapDialog_Title=Carte de couleurs
3838
ColorMapDialog_Value=Valeur (0-255)
3939
Column=Colonne
40-
ConvertToEmbeddedJavaScript=Convertir en JavaScript intégré\u2026
41-
ConvertToEmbeddedPython=Convertir en Python intégré\u2026
40+
ConvertToEmbeddedJavaScript=Convertir en JavaScript int\u00E9gr\u00E9\u2026
41+
ConvertToEmbeddedPython=Convertir en Python int\u00E9gr\u00E9\u2026
4242
ConvertToScriptFile=Convertir en fichier script
4343
Copy=Copier
4444
Duplicate=Dupliquer
4545
Edit=Modifier\u2026
4646
ExportWidgetInfo=Exporter vers un fichier
4747
CopyWidgetInfo=Afficher liste des Pv
4848
CopyButton =Copier dans le press-papier
49-
ExportDone=Informations sur le widget exportées dans le fichier {0}.
50-
ExportFailed=Échec de l’exportation.
49+
ExportDone=Informations sur le widget export\u00E9es dans le fichier {0}.
50+
ExportFailed=\u00C9chec de l’exportation.
5151
FileTypeAll=Tous les fichiers (*.*)
5252
FileTypeDisplays=Affichages (*.bob)
5353
FontDialog_ExampleText=Texte exemple
54-
FontDialog_Family=Police personnalisée :
55-
FontDialog_Info=Séléctionnez une police prédéfinie, ou une police personnalisée
56-
FontDialog_Predefined=Polices prédéfinies
54+
FontDialog_Family=Police personnalis\u00E9e :
55+
FontDialog_Info=S\u00E9l\u00E9ctionnez une police pr\u00E9d\u00E9finie, ou une police personnalis\u00E9e
56+
FontDialog_Predefined=Polices pr\u00E9d\u00E9finies
5757
FontDialog_Preview=Aperçu :
5858
FontDialog_Size=Taille :
5959
FontDialog_Style=Style :
@@ -67,98 +67,101 @@ MacrosDialog_NameCol=Nom de la macro
6767
MacrosDialog_Title=Macros
6868
MacrosDialog_ValueCol=Valeur
6969
MacrosTable_NameHint=<Entrer le nom>
70-
MacrosTable_ToolTip=Modifier les noms ou les valeurs. Ajouter une nouvelle macro dans la dernière ligne
70+
MacrosTable_ToolTip=Modifier les noms ou les valeurs. Ajouter une nouvelle macro dans la derni\u00E8re ligne
7171
MacrosTable_ValueHint=<Entrer la valeur>
7272
MoveDown=Vers le bas
7373
MoveUp=Vers le haut
74-
NotSet=Non défini
75-
OpenInExternalEditor=Ouvrir dans un éditeur externe
74+
NotSet=Non d\u00E9fini
75+
OpenInExternalEditor=Ouvrir dans un \u00E9diteur externe
7676
Password=Mot de passe
7777
Password_Caption=Mot de passe :
7878
Password_Error=Mot de passe incorrect
7979
Password_Prompt=Entrer le mot de passe
80-
PointsDialog_Info=Modifier les coordonnées des points
80+
PointsDialog_Info=Modifier les coordonn\u00E9es des points
8181
PointsDialog_Title=Modifier les points
8282
PointsTable_Empty=Pas de points
8383
PointsTable_X=X
8484
PointsTable_Y=Y
8585
Red=Rouge
8686
Remove=Supprimer
8787
Row=Ligne
88-
RulesDialog_ColName=Règle
89-
RulesDialog_ColBoolExp=Expression booléenne
88+
RulesDialog_ColName=R\u00E8gle
89+
RulesDialog_ColBoolExp=Expression bool\u00E9enne
9090
RulesDialog_ColValExp=Expression de valeur
91-
RulesDialog_DefaultRuleName=Nouvelle règle
91+
RulesDialog_DefaultRuleName=Nouvelle r\u00E8gle
9292
RulesDialog_ExpressionsTT=Modifier les expressions
93-
RulesDialog_Info=Modifier les règles pour le widget
93+
RulesDialog_Info=Modifier les r\u00E8gles pour le widget
9494
RulesDialog_NoExpressions=Pas d’expressions dans le tableau.
9595
RulesDialog_NoPVs=Pas de PVs dans le tableau.
96-
RulesDialog_NoRules=Pas de règles dans le tableau.
97-
RulesDialog_PVsTT=Modifier les noms des PV et sélectionner si les changements de leur valeur déclenchent l’exécution de la règle
98-
RulesDialog_RulesTT=Modifier les règles
99-
RulesDialog_SelectRule=Séléctionner la règle pour voir/ajouter PV/Expression
96+
RulesDialog_NoRules=Pas de r\u00E8gles dans le tableau.
97+
RulesDialog_PVsTT=Modifier les noms des PV et s\u00E9lectionner si les changements de leur valeur d\u00E9clenchent l’ex\u00E9cution de la r\u00E8gle
98+
RulesDialog_RulesTT=Modifier les r\u00E8gles
99+
RulesDialog_SelectRule=S\u00E9l\u00E9ctionner la r\u00E8gle pour voir/ajouter PV/Expression
100100
RulesDialog_ShowScript=Afficher le script
101-
RulesDialog_Title=Règles
102-
ScriptsDialog_BtnEmbedJS=Intégrer JS
103-
ScriptsDialog_BtnEmbedPy=Intégrer Py
101+
RulesDialog_Title=R\u00E8gles
102+
ScriptsDialog_BtnEmbedJS=Int\u00E9grer JS
103+
ScriptsDialog_BtnEmbedPy=Int\u00E9grer Py
104104
ScriptsDialog_BtnFile=Fichier
105-
ScriptsDialog_CheckConnections=Déclencher uniquement lorsque tous les PVs sont connectés
105+
ScriptsDialog_CheckConnections=D\u00E9clencher uniquement lorsque tous les PVs sont connect\u00E9s
106106
ScriptsDialog_ColPV=Nom du PV
107107
ScriptsDialog_ColScript=Script
108-
ScriptsDialog_ColTrigger=Déclencheur
108+
ScriptsDialog_ColTrigger=D\u00E9clencheur
109109
ScriptsDialog_DefaultScriptFile=mon_script.py
110110
ScriptsDialog_Info=Modifier les scripts et leurs PVs
111111
ScriptsDialog_JavaScriptScriptFile=mon_script.js
112112
ScriptsDialog_NoScripts=Pas de scripts dans le tableau.
113113
ScriptsDialog_NoPVs=Pas de PVs dans le tableau.
114-
ScriptsDialog_PVsTT=Modifier les noms des PV et sélectionner si les changements de leur valeur déclenchent l’exécution du script
114+
ScriptsDialog_PVsTT=Modifier les noms des PV et s\u00E9lectionner si les changements de leur valeur d\u00E9clenchent l’ex\u00E9cution du script
115115
ScriptsDialog_PythonScriptFile=mon_script.py
116-
ScriptsDialog_ScriptsTT=Séléctionner le fichier script externe ou modifier le texte du script intégré
116+
ScriptsDialog_ScriptsTT=S\u00E9l\u00E9ctionner le fichier script externe ou modifier le texte du script int\u00E9gr\u00E9
117117
ScriptsDialog_Title=Scripts
118-
Select=Séléctionner\u2026
118+
Select=S\u00E9l\u00E9ctionner\u2026
119119
ShowConfirmationDialogTitle=Veuillez confirmer
120120
ShowErrorDialogTitle=Erreur
121121
ShowMessageDialogTitle=Message
122122
ShowSaveAsDialogTitle=Enregistrer sous
123+
WebPageErrorDetails=D\u00E9tails de l\u0027erreur
124+
WebPageErrorLoading=Erreur au chargement de la page
125+
WebPageErrorMessage=Message d\u0027erreur
123126
WidgetColorPopOver_Hex=Valeur Hex :
124127
WidgetColorPopOver_Alpha=Alpha :
125128
WidgetColorPopOver_Blue=Bleu :
126129
WidgetColorPopOver_Color=Couleur :
127-
WidgetColorPopOver_CustomColor=Couleur personnalisée
128-
WidgetColorPopOver_Default=défaut
129-
WidgetColorPopOver_DefaultButton=Défaut
130-
WidgetColorPopOver_Info={0} \u2013 Séléctionnez une couleur prédéfinie et/ou personnalisez-la.
130+
WidgetColorPopOver_CustomColor=Couleur personnalis\u00E9e
131+
WidgetColorPopOver_Default=d\u00E9faut
132+
WidgetColorPopOver_DefaultButton=D\u00E9faut
133+
WidgetColorPopOver_Info={0} \u2013 S\u00E9l\u00E9ctionnez une couleur pr\u00E9d\u00E9finie et/ou personnalisez-la.
131134
WidgetColorPopOver_Green=Vert :
132135
WidgetColorPopOver_Original=original
133-
WidgetColorPopOver_PredefinedColors=Couleurs prédéfinies
136+
WidgetColorPopOver_PredefinedColors=Couleurs pr\u00E9d\u00E9finies
134137
WidgetColorPopOver_Red=Rouge :
135138
WidgetColorPopOver_SearchField=Rechercher
136139
WidgetColorPopOver_SearchFieldTT=Filtrer les couleurs par nom
137140
WidgetFontPopOver_ExampleText=Texte exemple
138141
WidgetFontPopOver_FontsFamilies=Familles de polices
139-
WidgetFontPopOver_Info={0} \u2013 Séléctionnez une police prédéfinie et/ou personnalisez-la.
140-
WidgetFontPopOver_PredefinedFonts=Polices prédéfinies
142+
WidgetFontPopOver_Info={0} \u2013 S\u00E9l\u00E9ctionnez une police pr\u00E9d\u00E9finie et/ou personnalisez-la.
143+
WidgetFontPopOver_PredefinedFonts=Polices pr\u00E9d\u00E9finies
141144
WidgetFontPopOver_Preview=Aperçu
142145
WidgetFontPopOver_PreviewPrompt=Entrez votre texte pour un aperçu.
143146
WidgetFontPopOver_SearchPrompt=Rechercher
144147
WidgetFontPopOver_SearchPromptTT=Filtrer les polices par nom
145148
WidgetFontPopOver_SizeCaption=Taille :
146-
WidgetFontPopOver_SizePrompt=Entrez ou séléctionnez la taille de la police
149+
WidgetFontPopOver_SizePrompt=Entrez ou s\u00E9l\u00E9ctionnez la taille de la police
147150
WidgetFontPopOver_Sizes=Tailles
148151
WidgetFontPopOver_StyleCaption=Style :
149-
WidgetFontPopOver_StylePrompt=Séléctionnez le style de la police
152+
WidgetFontPopOver_StylePrompt=S\u00E9l\u00E9ctionnez le style de la police
150153
WidgetFontPopOver_Styles=Styles
151-
WidgetInfoDialog_Category=Catégorie
154+
WidgetInfoDialog_Category=Cat\u00E9gorie
152155
WidgetInfoDialog_Count=Nombre
153-
WidgetInfoDialog_Disconnected=Déconnecté
156+
WidgetInfoDialog_Disconnected=D\u00E9connect\u00E9
154157
WidgetInfoDialog_Info_Fmt=Widget "{0}" ({1})
155158
WidgetInfoDialog_Name=Nom
156159
WidgetInfoDialog_Path=Chemin du widget
157-
WidgetInfoDialog_Property=Propriété
158-
WidgetInfoDialog_State=État
160+
WidgetInfoDialog_Property=Propri\u00E9t\u00E9
161+
WidgetInfoDialog_State=\u00C9tat
159162
WidgetInfoDialog_WidgetStats=Statistiques des widgets
160163
WidgetInfoDialog_TabMacros=Macros
161-
WidgetInfoDialog_TabProperties=Propriétés
164+
WidgetInfoDialog_TabProperties=Propri\u00E9t\u00E9s
162165
WidgetInfoDialog_TabPVs=PV
163166
WidgetInfoDialog_Title=Infos du widget
164167
WidgetInfoDialog_Total=Total
@@ -167,4 +170,4 @@ WidgetInfoDialog_WidgetType=Type de widget
167170
Zoom_All=Tout
168171
Zoom_Height=Hauteur
169172
Zoom_Width=Largeur
170-
Reset_Axis_Ranges=Réinitialiser les axes
173+
Reset_Axis_Ranges=R\u00E9initialiser les axes

0 commit comments

Comments
 (0)