Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ private static String URLdecode(final String text)
}
catch (UnsupportedEncodingException ex)
{
logger.log(Level.SEVERE, "Impossible to decode {0} because {1}", new Object[] { text, ex.getMessage() });
return text;
}
}
Expand Down Expand Up @@ -299,6 +300,7 @@ private static String doResolveResource(final String parent_display, final Strin
}

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

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

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

try
{
final InputStream stream = openURL(resource_name);
stream.close();
// final InputStream stream = openURL(resource_name);
// stream.close();
//Test only if the page exist and not read the content
final String escaped = resource_name.replace(" ", "%20");
URL resource = new URL(escaped);
resource.openConnection();
return true;
}
catch (Exception ex)
{
logger.log(Level.SEVERE, "Impossible to open connection on URL {0} because of {1}", new Object[] { resource_name, ex.getMessage() });
return false;
}
}
Expand Down Expand Up @@ -397,7 +407,7 @@ public static File getFile(final URI resource) throws Exception
// .. but once examples are inside the jar,
// we can only read them as a stream.
// There is no File access.
logger.log(Level.WARNING, "Cannot get `File` for " + url);
logger.log(Level.WARNING, "Cannot get `File` for " + url + " " + ex.getMessage());
return null;
}
}
Expand Down Expand Up @@ -488,7 +498,6 @@ public static InputStream openURL(final String resource_name) throws Exception

private static final byte[] readUrl(final String url) throws Exception
{
// System.out.println("Actually reading " + url + ", not cached");
final InputStream in = openURL(url, timeout_ms);
final ByteArrayOutputStream buf = new ByteArrayOutputStream();
IOUtils.copy(in, buf);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ public class Messages
ShowErrorDialogTitle,
ShowMessageDialogTitle,
ShowSaveAsDialogTitle,
WebPageErrorDetails,
WebPageErrorLoading,
WebPageErrorMessage,
WidgetColorPopOver_Alpha,
WidgetColorPopOver_Blue,
WidgetColorPopOver_Color,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.csstudio.display.builder.model.WidgetPropertyListener;
import org.csstudio.display.builder.model.util.ModelResourceUtil;
import org.csstudio.display.builder.model.widgets.WebBrowserWidget;
import org.csstudio.display.builder.representation.javafx.Messages;
import org.phoebus.framework.jobs.JobManager;
import org.phoebus.framework.util.IOUtils;
import org.phoebus.ui.javafx.ImageCache;
Expand Down Expand Up @@ -102,7 +103,22 @@ protected void goToURL(String url)
// still defaulting to "http://".
else if (url.indexOf("://") < 0)
url = "http://" + url;
webEngine.load(url);

//Try to open page to test if we can open page
try {
InputStream openURL = ModelResourceUtil.openURL(url, 0);
openURL.close();
webEngine.load(url);
}
catch (Exception e) {
//if there is an error display a error page in engine
StringBuilder errorMessage = new StringBuilder();
errorMessage.append("<u style=\"color:red;\">"+Messages.WebPageErrorLoading+" :</u><BR>");
errorMessage.append("<a href=" + url + " target=\"_blank\">"+url+"</a><BR>");
errorMessage.append("<u>"+Messages.WebPageErrorMessage+" :</u> " + e.getMessage() + "<BR>");
errorMessage.append("<u>"+Messages.WebPageErrorDetails+" :</u> " + e.toString());
webEngine.loadContent(errorMessage.toString());
}
}

private void download(final String url, final String file)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ ShowConfirmationDialogTitle=Please Confirm
ShowErrorDialogTitle=Error
ShowMessageDialogTitle=Message
ShowSaveAsDialogTitle=Save As
WebPageErrorDetails=Error details
WebPageErrorLoading=Error when loading page
WebPageErrorMessage=Error message
WidgetColorPopOver_Hex=Hex Value:
WidgetColorPopOver_Alpha=Alpha:
WidgetColorPopOver_Blue=Blue:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,58 +2,58 @@ ActionButton_N_ActionsAsOneFmt={0} actions
ActionButton_N_ActionsFmt=Choisissez 1 parmi {0}
ActionButton_NoActions=VIDE
ActionsDialog_Actions=Actions :
ActionsDialog_Detail=Détail de l’action :
ActionsDialog_Detail=D\u00E9tail de l’action :
ActionsDialog_DisplayPath=Chemin de l’affichage :
ActionsDialog_ExecuteAll=Exécuter toutes les actions en une seule fois
ActionsDialog_ExecuteAll=Ex\u00E9cuter toutes les actions en une seule fois
ActionsDialog_FilePath=Chemin du fichier :
ActionsDialog_Info=Configurer les actions qui ouvrent des affichages, écrivent des PV, etc.
ActionsDialog_Info=Configurer les actions qui ouvrent des affichages, \u00E9crivent des PV, etc.
ActionsDialog_PVName=Nom du PV :
ActionsDialog_ScriptPath=Fichier de script :
ActionsDialog_ScriptText=Texte du script intégré :
ActionsDialog_ScriptText=Texte du script int\u00E9gr\u00E9 :
ActionsDialog_Title=Actions
Add=Ajouter
AddEmbeddedJavaScript=Ajouter JavaScript intégré\u2026
AddEmbeddedPython=Ajouter Python intégré\u2026
AddEmbeddedJavaScript=Ajouter JavaScript int\u00E9gr\u00E9\u2026
AddEmbeddedPython=Ajouter Python int\u00E9gr\u00E9\u2026
AddJavaScriptFile=Ajouter un fichier JavaScript
AddPythonFile=Ajouter un fichier Python
Alpha=Alpha
Blue=Bleu
BoolButtonError_Body=Le dialogue de confirmation est pris en charge uniquement pour le mode toggle.
BoolButtonError_Title=Configuration non prise en charge
ColorDialog_Current=Actuel
ColorDialog_Custom=Couleur personnalisée
ColorDialog_Default=Défaut
ColorDialog_Info=Séléctionnez une couleur prédéfinie, ou une couleur personnalisée
ColorDialog_Custom=Couleur personnalis\u00E9e
ColorDialog_Default=D\u00E9faut
ColorDialog_Info=S\u00E9l\u00E9ctionnez une couleur pr\u00E9d\u00E9finie, ou une couleur personnalis\u00E9e
ColorDialog_Original=Original
ColorDialog_Predefined=Couleurs prédéfinies
ColorDialog_Predefined=Couleurs pr\u00E9d\u00E9finies
ColorDialog_Title_FMT=Choisir {0}
ColorMap_Custom=Carte de couleurs personnalisée
ColorMap_Custom=Carte de couleurs personnalis\u00E9e
ColorMapDialog_Add=Ajouter une couleur
ColorMapDialog_Color=Couleur
ColorMapDialog_Info=Séléctionnez une carte de couleurs prédéfinie. Optionnellement, personnalisez-la.
ColorMapDialog_PredefinedMap=Carte de couleurs prédéfinie
ColorMapDialog_Info=S\u00E9l\u00E9ctionnez une carte de couleurs pr\u00E9d\u00E9finie. Optionnellement, personnalisez-la.
ColorMapDialog_PredefinedMap=Carte de couleurs pr\u00E9d\u00E9finie
ColorMapDialog_Remove=Supprimer la couleur
ColorMapDialog_Result=Résultat
ColorMapDialog_Result=R\u00E9sultat
ColorMapDialog_Title=Carte de couleurs
ColorMapDialog_Value=Valeur (0-255)
Column=Colonne
ConvertToEmbeddedJavaScript=Convertir en JavaScript intégré\u2026
ConvertToEmbeddedPython=Convertir en Python intégré\u2026
ConvertToEmbeddedJavaScript=Convertir en JavaScript int\u00E9gr\u00E9\u2026
ConvertToEmbeddedPython=Convertir en Python int\u00E9gr\u00E9\u2026
ConvertToScriptFile=Convertir en fichier script
Copy=Copier
Duplicate=Dupliquer
Edit=Modifier\u2026
ExportWidgetInfo=Exporter vers un fichier
CopyWidgetInfo=Afficher liste des Pv
CopyButton =Copier dans le press-papier
ExportDone=Informations sur le widget exportées dans le fichier {0}.
ExportFailed=Échec de l’exportation.
ExportDone=Informations sur le widget export\u00E9es dans le fichier {0}.
ExportFailed=\u00C9chec de l’exportation.
FileTypeAll=Tous les fichiers (*.*)
FileTypeDisplays=Affichages (*.bob)
FontDialog_ExampleText=Texte exemple
FontDialog_Family=Police personnalisée :
FontDialog_Info=Séléctionnez une police prédéfinie, ou une police personnalisée
FontDialog_Predefined=Polices prédéfinies
FontDialog_Family=Police personnalis\u00E9e :
FontDialog_Info=S\u00E9l\u00E9ctionnez une police pr\u00E9d\u00E9finie, ou une police personnalis\u00E9e
FontDialog_Predefined=Polices pr\u00E9d\u00E9finies
FontDialog_Preview=Aperçu :
FontDialog_Size=Taille :
FontDialog_Style=Style :
Expand All @@ -67,98 +67,101 @@ MacrosDialog_NameCol=Nom de la macro
MacrosDialog_Title=Macros
MacrosDialog_ValueCol=Valeur
MacrosTable_NameHint=<Entrer le nom>
MacrosTable_ToolTip=Modifier les noms ou les valeurs. Ajouter une nouvelle macro dans la dernière ligne
MacrosTable_ToolTip=Modifier les noms ou les valeurs. Ajouter une nouvelle macro dans la derni\u00E8re ligne
MacrosTable_ValueHint=<Entrer la valeur>
MoveDown=Vers le bas
MoveUp=Vers le haut
NotSet=Non défini
OpenInExternalEditor=Ouvrir dans un éditeur externe
NotSet=Non d\u00E9fini
OpenInExternalEditor=Ouvrir dans un \u00E9diteur externe
Password=Mot de passe
Password_Caption=Mot de passe :
Password_Error=Mot de passe incorrect
Password_Prompt=Entrer le mot de passe
PointsDialog_Info=Modifier les coordonnées des points
PointsDialog_Info=Modifier les coordonn\u00E9es des points
PointsDialog_Title=Modifier les points
PointsTable_Empty=Pas de points
PointsTable_X=X
PointsTable_Y=Y
Red=Rouge
Remove=Supprimer
Row=Ligne
RulesDialog_ColName=Règle
RulesDialog_ColBoolExp=Expression booléenne
RulesDialog_ColName=R\u00E8gle
RulesDialog_ColBoolExp=Expression bool\u00E9enne
RulesDialog_ColValExp=Expression de valeur
RulesDialog_DefaultRuleName=Nouvelle règle
RulesDialog_DefaultRuleName=Nouvelle r\u00E8gle
RulesDialog_ExpressionsTT=Modifier les expressions
RulesDialog_Info=Modifier les règles pour le widget
RulesDialog_Info=Modifier les r\u00E8gles pour le widget
RulesDialog_NoExpressions=Pas d’expressions dans le tableau.
RulesDialog_NoPVs=Pas de PVs dans le tableau.
RulesDialog_NoRules=Pas de règles dans le tableau.
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
RulesDialog_RulesTT=Modifier les règles
RulesDialog_SelectRule=Séléctionner la règle pour voir/ajouter PV/Expression
RulesDialog_NoRules=Pas de r\u00E8gles dans le tableau.
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
RulesDialog_RulesTT=Modifier les r\u00E8gles
RulesDialog_SelectRule=S\u00E9l\u00E9ctionner la r\u00E8gle pour voir/ajouter PV/Expression
RulesDialog_ShowScript=Afficher le script
RulesDialog_Title=Règles
ScriptsDialog_BtnEmbedJS=Intégrer JS
ScriptsDialog_BtnEmbedPy=Intégrer Py
RulesDialog_Title=R\u00E8gles
ScriptsDialog_BtnEmbedJS=Int\u00E9grer JS
ScriptsDialog_BtnEmbedPy=Int\u00E9grer Py
ScriptsDialog_BtnFile=Fichier
ScriptsDialog_CheckConnections=Déclencher uniquement lorsque tous les PVs sont connectés
ScriptsDialog_CheckConnections=D\u00E9clencher uniquement lorsque tous les PVs sont connect\u00E9s
ScriptsDialog_ColPV=Nom du PV
ScriptsDialog_ColScript=Script
ScriptsDialog_ColTrigger=Déclencheur
ScriptsDialog_ColTrigger=D\u00E9clencheur
ScriptsDialog_DefaultScriptFile=mon_script.py
ScriptsDialog_Info=Modifier les scripts et leurs PVs
ScriptsDialog_JavaScriptScriptFile=mon_script.js
ScriptsDialog_NoScripts=Pas de scripts dans le tableau.
ScriptsDialog_NoPVs=Pas de PVs dans le tableau.
ScriptsDialog_PVsTT=Modifier les noms des PV et sélectionner si les changements de leur valeur déclenchent l’exécution du script
ScriptsDialog_PVsTT=Modifier les noms des PV et s\u00E9lectionner si les changements de leur valeur d\u00E9clenchent l’ex\u00E9cution du script
ScriptsDialog_PythonScriptFile=mon_script.py
ScriptsDialog_ScriptsTT=Séléctionner le fichier script externe ou modifier le texte du script intégré
ScriptsDialog_ScriptsTT=S\u00E9l\u00E9ctionner le fichier script externe ou modifier le texte du script int\u00E9gr\u00E9
ScriptsDialog_Title=Scripts
Select=Séléctionner\u2026
Select=S\u00E9l\u00E9ctionner\u2026
ShowConfirmationDialogTitle=Veuillez confirmer
ShowErrorDialogTitle=Erreur
ShowMessageDialogTitle=Message
ShowSaveAsDialogTitle=Enregistrer sous
WebPageErrorDetails=D\u00E9tails de l\u0027erreur
WebPageErrorLoading=Erreur au chargement de la page
WebPageErrorMessage=Message d\u0027erreur
WidgetColorPopOver_Hex=Valeur Hex :
WidgetColorPopOver_Alpha=Alpha :
WidgetColorPopOver_Blue=Bleu :
WidgetColorPopOver_Color=Couleur :
WidgetColorPopOver_CustomColor=Couleur personnalisée
WidgetColorPopOver_Default=défaut
WidgetColorPopOver_DefaultButton=Défaut
WidgetColorPopOver_Info={0} \u2013 Séléctionnez une couleur prédéfinie et/ou personnalisez-la.
WidgetColorPopOver_CustomColor=Couleur personnalis\u00E9e
WidgetColorPopOver_Default=d\u00E9faut
WidgetColorPopOver_DefaultButton=D\u00E9faut
WidgetColorPopOver_Info={0} \u2013 S\u00E9l\u00E9ctionnez une couleur pr\u00E9d\u00E9finie et/ou personnalisez-la.
WidgetColorPopOver_Green=Vert :
WidgetColorPopOver_Original=original
WidgetColorPopOver_PredefinedColors=Couleurs prédéfinies
WidgetColorPopOver_PredefinedColors=Couleurs pr\u00E9d\u00E9finies
WidgetColorPopOver_Red=Rouge :
WidgetColorPopOver_SearchField=Rechercher
WidgetColorPopOver_SearchFieldTT=Filtrer les couleurs par nom
WidgetFontPopOver_ExampleText=Texte exemple
WidgetFontPopOver_FontsFamilies=Familles de polices
WidgetFontPopOver_Info={0} \u2013 Séléctionnez une police prédéfinie et/ou personnalisez-la.
WidgetFontPopOver_PredefinedFonts=Polices prédéfinies
WidgetFontPopOver_Info={0} \u2013 S\u00E9l\u00E9ctionnez une police pr\u00E9d\u00E9finie et/ou personnalisez-la.
WidgetFontPopOver_PredefinedFonts=Polices pr\u00E9d\u00E9finies
WidgetFontPopOver_Preview=Aperçu
WidgetFontPopOver_PreviewPrompt=Entrez votre texte pour un aperçu.
WidgetFontPopOver_SearchPrompt=Rechercher
WidgetFontPopOver_SearchPromptTT=Filtrer les polices par nom
WidgetFontPopOver_SizeCaption=Taille :
WidgetFontPopOver_SizePrompt=Entrez ou séléctionnez la taille de la police
WidgetFontPopOver_SizePrompt=Entrez ou s\u00E9l\u00E9ctionnez la taille de la police
WidgetFontPopOver_Sizes=Tailles
WidgetFontPopOver_StyleCaption=Style :
WidgetFontPopOver_StylePrompt=Séléctionnez le style de la police
WidgetFontPopOver_StylePrompt=S\u00E9l\u00E9ctionnez le style de la police
WidgetFontPopOver_Styles=Styles
WidgetInfoDialog_Category=Catégorie
WidgetInfoDialog_Category=Cat\u00E9gorie
WidgetInfoDialog_Count=Nombre
WidgetInfoDialog_Disconnected=Déconnecté
WidgetInfoDialog_Disconnected=D\u00E9connect\u00E9
WidgetInfoDialog_Info_Fmt=Widget "{0}" ({1})
WidgetInfoDialog_Name=Nom
WidgetInfoDialog_Path=Chemin du widget
WidgetInfoDialog_Property=Propriété
WidgetInfoDialog_State=État
WidgetInfoDialog_Property=Propri\u00E9t\u00E9
WidgetInfoDialog_State=\u00C9tat
WidgetInfoDialog_WidgetStats=Statistiques des widgets
WidgetInfoDialog_TabMacros=Macros
WidgetInfoDialog_TabProperties=Propriétés
WidgetInfoDialog_TabProperties=Propri\u00E9t\u00E9s
WidgetInfoDialog_TabPVs=PV
WidgetInfoDialog_Title=Infos du widget
WidgetInfoDialog_Total=Total
Expand All @@ -167,4 +170,4 @@ WidgetInfoDialog_WidgetType=Type de widget
Zoom_All=Tout
Zoom_Height=Hauteur
Zoom_Width=Largeur
Reset_Axis_Ranges=Réinitialiser les axes
Reset_Axis_Ranges=R\u00E9initialiser les axes
Loading
Loading