<ul>
<li>Ensure that you have TestNG plugin correctly install for eclipse</li>
<li>Ensure that your test classes are error free and properly annotated</li>
- <li>Create a lunch configuration "Select the Run / Run... (or Run / Debug...) menu and create a new TestNG configuration"</li>
+ <li>Create a launch configuration "Select the Run / Run... (or Run / Debug...) menu and create a new TestNG configuration"</li>
<li>Run the tests by executing the configuration target created above</li>
</ul>
A more detailed guide for installing and executing TestNG in eclipse is available at <a href=http://testng.org/doc/eclipse.html>testng.org/doc/eclipse.html</a> <br>
<div>
<script>
- jmolApplet("500x500","zap; load FILE '1gaq.txt'; frame 0; background black; select all; wireframe off; spacefill off; cartoons; restrict; center *; set selectionhalos true;select 0","jmolView");
+ jmolApplet("500x500","zap; load FILE '1gaq.txt'; frame 0; background black; select all; wireframe off; spacefill off; cartoons; restrict; center *; set selectionhalos true;set hoverDelay 0.001; select 0","jmolView");
</script>
</div>
<div>
<li>BioJS MSA - A JavaScript based multiple sequence alignment
viewer. <br> <em>For interactive alignment data
visualisation in a web browser.<br />Get more info about the
- BioJS MSA viewer at a
- href="http://msa.biojs.net/">http://msa.biojs.net/</a>
+ BioJS MSA viewer at <a href="http://msa.biojs.net/">http://msa.biojs.net/</a>
</em>
</li>
<p>
In Jalview 2.9, new HTML exporting options were introduced. The
standard HTML export option displays alignments as SVG documents
- embedded as scollable panes. Exported pages can optionally also
+ embedded as scrollable panes. Exported pages can optionally also
include <a href="../features/bioJsonFormat.html">BioJSON</a> data,
which allows Jalview to extract the original data used to create the
page. Jalview can also generate HTML pages which embed BioJSON data
and the BioJS MSA viewer, a pure javascript alignment viewer that
- provides a range of interactive analysis capabiltiies.
+ provides a range of interactive analysis capabilities.
</p>
<p>
<p>
</td>
</tr>
<tr>
+ <td width="60" nowrap>
+ <div align="center">
+ <strong><a name="Jalview.2.9.0b1">2.9.0b1</a><br />
+ <em>29/09/2015</em></strong>
+ </div>
+ </td>
+ <td>
+ <div align="center"></div>
+ </td>
+ <td>
+ <div align="left">
+ <ul>
+ <li>Mapping of cDNA to protein in split frames incorrect when sequence start > 1</li>
+ <li>Split frame example added to applet examples page</li>
+ <li>Applet with Jmol examples not loading correctly</li>
+ <li>Incorrect warning on deleting selected columns</li>
+ <li>Annotations incorrectly rendered after BioJS export and reimport</li>
+ <li>Incorrect sequence limits after Fetch DB References with 'trim retrieved sequences'</li>
+ <li>Spanish translations of localized text - updates needed for 2.9</li>
+ <li>Provide signed OSX InstallAnywhere installer</li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
<td><div align="center">
<strong><a name="Jalview.2.9">2.9</a><br /> <em>10/9/2015</em></strong>
</div></td>
</td>
</tr>
<tr>
- <td width="60" nowrap>
- <div align="center">
- <strong><a name="Jalview.2.8.2b1">2.8.2b1</a><br />
- <em>15/12/2014</em></strong>
- </div>
- </td>
- <td>
- <div align="center"></div>
- </td>
- <td>
- <div align="center">
- <ul>
- <li>Reinstated the display of default example file on
- startup</li>
- <li>All pairs shown in Jalview window when viewing
- result of pairwise alignment</li>
- </ul>
- </div>
- </td>
- </tr>
- <tr>
<td><div align="center">
<strong><a name="Jalview.2.8.2">2.8.2</a><br /> <em>3/12/2014</em></strong>
</div></td>
label.open_split_window? = Would you like to open as a split window, with cDNA and protein linked?
label.open_split_window = Open split window
label.no_mappings = No mappings found
-label.mapping_failed = No sequence mapping could be made between the alignments.<br>A mapping requires sequence names to match, and equivalent sequence lengths.
action.no = No
action.yes = Yes
label.for = for
label.new_vamsas_session = Nueva sesión Vamsas
label.load_vamsas_session = Cargar sesión Vamsas
label.save_vamsas_session = Guardar sesión Vamsas
+action.save_vamsas_session = Guardar Sesión Vamsas
label.select_vamsas_session_opened_as_new_vamsas_session= Selecciones una sesión vamsas para abrirla como una nueva sesión.
label.open_saved_vamsas_session = Abrir una sesión VAMSAS guardada
label.groovy_console = Consola Groovy
label.clustalx_colours = Colores de Clustalx
label.above_identity_percentage = Sobre % identidad
label.create_sequence_details_report_annotation_for = Anotación para {0}
-label.sequece_details_for = Detalles de la secuencia para {0}
+label.sequence_details_for = Detalles de la secuencia para {0}
label.sequence_name = Nombre de la secuencia
label.sequence_description = Descripción de la secuencia
label.edit_sequence_name_description = Editar el nombre/descripción de la secuencia
label.set_proxy_settings = Por favor, configure su proxy en la pestaña 'Conexiones' de la ventana de Preferencia
label.proxy_authorization_failed = Autorización del proxy fallida
label.internal_jalview_error = Error interno de Jalview
-label.secondary_structure_prediction_service_couldnt_be_located = No se ha podido encontrar el Servicio de Predicciónd de la Estructura Secudaria {0} en {1}.
+label.secondary_structure_prediction_service_couldnt_be_located = No se ha podido encontrar el Servicio de Predicción de la Estructura Secundaria {0} en {1}.
label.service_called_is_not_msa_service = El Servicio llamado \n{0}\nno es un \nServicio de Alineamiento M\u00FAltiple de Secuencias\!
label.msa_service_is_unknown = El Servicio de Alineamiento Múltiple llamado {0} es desconocido
label.service_called_is_not_seq_search_service = El Servicio llamando \n{0}\nno es un \nServicio de B\u00FAsqueda de Secuencias\!
label.show_logo = Mostrar logo
label.normalise_logo = Normalizar logo
label.no_colour_selection_in_scheme = Por favor, seleccione un color antes de aplicar el esquema cromático
-label.no_colour_selection_warn = Error guardando el esquema cromático
\ No newline at end of file
+label.no_colour_selection_warn = Error guardando el esquema cromático
+label.start_jalview = Arrancar Jalview
+warn.urls_no_jaba=URLs sin servicios JABA
+label.structure_chooser_filter_time=Selector de Estructura - Tiempo de filtro ({0})
+action.back=Atras
+action.choose_annotations=Escoja Anotaciones...
+action.feature_settings=Ajustes de características...
+info.invalid_msa_notenough=No suficientes datos de sequencia para alinear
+label.result=resultado
+label.results=resultados
+label.no_mappings=No hay mapeados encontrados
+label.struct_from_pdb=Procesar la estructura secundaria PDB
+label.hide_selected_annotations=Ocultar anotaciones seleccionados
+info.select_annotation_row=Seleccionar Fila de Anotaciones
+label.delete_all=Borrar todas las secuencias
+label.rnalifold_calculations=Predicción RNAAliFold
+label.rnalifold_settings=Cambiar ajustes RNAAliFold...
+label.sort_ann_by=Ordenar anotaciones por
+info.enter_search_text_here=Introducir texto de búsqueda aquí
+action.load_vamsas_session=Cargar Sesión Vamsas...
+label.show_all_al_annotations=Mostrar anotaciones relacionadas con el alineamiento
+label.hide_all_al_annotations=Ocultar anotaciones relacionadas con el alineamiento
+label.show_all_seq_annotations=Mostrar anotaciones relacionadas con las secuencias
+label.hide_all_seq_annotations=Ocultar anotaciones relacionadas con las secuencias
+label.close_viewer=Cerrar Visualizador
+label.all_views=Todas las Vistas
+label.search_result=Resultado de búsqueda
+action.fetch_sequences=Recuperar Secuencias...
+label.hide_annotations=Ocultar anotaciones
+action.export_groups=Exportar Grupos
+action.no=No
+action.yes=Sí
+label.export_settings=Exportar Ajustes
+label.linked_view_title=Vista vinculada de cDNA y proteína
+label.view_protein_structure=Ver Estructura Proteica
+label.couldnt_read_data=No se pudo leer los datos
+status.opening_file=abriendo fichero
+label.except_selected_sequences=Todo excepto secuencias seleccionadas
+label.structure_chooser_no_of_structures=Selector de Estructuras - {0} Encontró ({1})
+label.search_filter=filtro de búsqueda
+label.sort_annotations_by_label=Ordenar por etiqueta
+label.sort_annotations_by_sequence=Ordenar por secuencia
+label.biojs_html_export=BioJS
+info.enter_search_text_to_enable=Introducir Texto de Búsqueda para Habilitar
+label.autoadd_secstr=Añadir anotación de estructura secundaria al alineamiento
+action.annotations=Anotaciones
+label.nuc_alignment_colour=Color del Alineamiento Nucleotídico
+label.copy_format_from=Copiar formato de
+label.chimera=Chimera
+label.open_split_window=Abrir ventana dividida
+label.open_split_window?=¿Quieres abrir ventana dividida, con cDNA y proteína vinculadas?
+status.searching_for_pdb_structures=Buscando Estructuras PDB
+label.scale_as_cdna=Adaptar residuos proteicos a los codones
+action.export_hidden_sequences=Exportar Secuencias Ocultas
+action.export_hidden_columns=Exportar Columnas Ocultas
+label.found_structures_summary=Resumen de Estructuras Encontradas
+info.no_pdb_entry_found_for=No se ha encontrada entrada PDB para {0}
+label.turn=Giro
+label.beta_strand=Lámina Beta
+label.show_first=Mostrar arriba
+label.show_last=Mostrar por debajo
+label.split_window=Ventana Dividida
+label.invalid_search=Texto de búsqueda inválido
+action.export_annotations=Exportar Anotaciones
+action.set_as_reference=Marcar como Referencia
+action.unmark_as_reference=Desmarcar como Referencia
+action.set_text_colour=Color de Texto...
+label.chimera_failed=Error al abrir Chimera - está instalado?\nCompruebe ruta en Preferencias, Estructura
+label.find=Buscar
+label.select_pdb_file=Seleccionar Fichero PDB
+label.structures_filter=Filtro de Estructuras
+label.scale_protein_to_cdna=Adaptar proteína a cDNA
+status.loading_cached_pdb_entries=Cargando Entradas PDB en Caché
+label.select=Seleccionar :
+label.select_by_annotation=Seleccionar/Ocultar Columnas por Anotación
+action.select_by_annotation=Seleccionar/Ocultar Columnas por Anotación...
+action.export_features=Exportar Características
+error.invalid_regex=Expresión regular inválida
+label.autoadd_temp=Añadir anotación factor de temperatura al alineamiento
+tooltip.rnalifold_settings=Modificar la configuración de la predicción RNAAlifold. Úselo para ocultar o mostrar resultados del cálculo de RNA, o cambiar parámetros de el plegado de RNA.
+label.chimera_path_tip=Jalview intentará primero las rutas introducidas aquí, Y si no las rutas usuales de instalación
+label.structure_chooser=Selector de Estructuras
+label.structure_chooser_manual_association=Selector de Estructuras - asociación manual
+label.threshold_filter=Filtro de Umbral
+label.add_reference_annotations=Añadir anotaciones de referencia
+label.hide_insertions=Ocultar Inserciones
+info.change_threshold_mode_to_enable=Cambiar Modo de Umbral para Habilitar
+label.separate_multiple_query_values=Introducir uno o mas {0}s separados por punto y coma ";"
+label.let_chimera_manage_structure_colours=Deja que Chimera maneje colores de estructuras
+label.view_rna_structure=Estructura 2D VARNA
+label.scale_protein_to_cdna_tip=Hacer a los residuos de proteínas de la misma anchura que los codones en ventanas divididas
+label.colour_with_chimera=Colorear con Chimera
+label.show_pdbstruct_dialog=Datos de Estructura 3D...
+label.hide_all=Ocultar todos
+label.invert=Invertir
+label.pdb_sequence_getcher=Buscador de Secuencias PDB
+tooltip.aacon_settings=Cambiar ajustes para cálculos AACon
+label.align=Alinear
+label.mark_as_representative=Marcar como representativa
+label.include_description=Incluir Descripción
+label.for=para
+label.invalid_chimera_path=Ruta de Chimera no encontrada o no ejecutable
+info.search_in_annotation_label=Buscar en etiqueta de {0}
+info.search_in_annotation_description=Buscar en descripción de {0}
+label.select_many_views=Seleccionar múltiples vistas
+label.add_annotations_for=Añadir anotaciones para
+action.background_colour=Color de Fondo...
+warn.urls_not_contacted=URLs que no pudieron ser contactados
+label.prot_alignment_colour=Color del Alineamiento Proteico
+info.associate_wit_sequence=Asociar con secuencia
+label.protein=Proteína
+warn.oneseq_msainput_selection=La selección actual sólo contiene una única secuencia. ¿Quieres enviar todas las secuencias para la alineación en su lugar?
+label.use_rnaview=Usar RNAView para estructura secondaria
+label.opens_the_jabaws_server_homepage=Abre la página de inicio del servidor JABAWS en navegador
+label.search_all=Introducir uno o más valores de búsqueda separados por punto y coma ";" (Nota: buscará en toda la base de datos PDB)
+label.confirm_close_chimera=Cerrará la conexión de Jalview a {0}.<br>¿Quieres cerrar la ventana Chimera también?
+tooltip.rnalifold_calculations=Se calcularán predicciones de estructura secondaria de RNA para el alineaminento, y se actualizarán si se efectuan cambios
+Calcular predicciónes de estructura secondaria para el alineamiento
+label.show_selected_annotations=Mostrar anotaciones seleccionadas
+status.colouring_chimera=Coloreando Chimera
+label.configure_displayed_columns=Configurar Columnas Mostradas
+exception.pdb_server_error=Error desde el servidor PDB
+exception.resource_not_be_found=El recurso solicitado no se ha encontrado
+label.aacon_calculations=cálculos AACon
+label.pdb_web-service_error=Error de servicio web PDB
+exception.unable_to_detect_internet_connection=Jalview no puede detectar una conexión a Internet
+label.chimera_path=Ruta de acceso a programa Chimera
+warn.delete_all=<html>Borrar todas las secuencias cerrará la ventana del alineamiento.<br>Confirmar o Cancelar.
+label.select_all=Seleccionar Todos
+label.alpha_helix=Hélice Alfa
+label.sequence_details_for=Detalles de secuencia para {0}
+label.chimera_help=Ayuda para Chimera
+label.find_tip=Buscar alineamiento, selección o IDs de secuencia para una subsecuencia (sin huecos)
+exception.pdb_server_unreachable=Jalview no puede conectar con el servidor PDBE Solr.\nPor favor, asegúrese de que está conectado a Internet y vuelva a intentarlo.
+label.structure_viewer=Visualizador de estructura for defecto
+label.embbed_biojson=Incrustar BioJSON al exportar HTML
+label.transparency_tip=Ajustar la transparencia a "ver a través" los colores de las características.
+label.choose_annotations=Escoja anotaciones
+label.structure_options=Opciones Estructura
+label.view_name_original=Original
+label.aacon_settings=Cambiar Ajustes AACon...
+tooltip.aacon_calculations=Actualizar cálculos AACon automáticamente.
+info.select_filter_option=Escoger Opción de Filtro / Entrada Manual
+info.invalid_msa_input_mininfo=Necesita por lo menos dos secuencias con al menos 3 residuos cada una, sin regiones ocultas entre ellas.
+label.chimera_missing=Visualizador de estructura Chimera no encontrado.<br/>Por favor, introduzca la ruta de Chimera,<br/>o descargar e instalar la UCSF Chimera.
+label.save_as_biojs_html=Guardar como HTML BioJs
+exception.pdb_rest_service_no_longer_available=Servicios Rest PDB ya no están disponibles!
import java.awt.Canvas;
import java.awt.CheckboxMenuItem;
import java.awt.Color;
+import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
+import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.util.StringTokenizer;
import java.util.Vector;
-import javax.swing.JOptionPane;
-
import org.jmol.viewer.Viewer;
public class AlignFrame extends EmbmenuFrame implements ActionListener,
normSequenceLogo.setState(viewport.isNormaliseSequenceLogo());
applyToAllGroups.setState(viewport.getColourAppliesToAllGroups());
annotationPanelMenuItem.setState(viewport.isShowAnnotation());
- showAlignmentAnnotations.setState(viewport.isShowAnnotation());
- showSequenceAnnotations.setState(viewport.isShowAnnotation());
+ showAlignmentAnnotations.setEnabled(annotationPanelMenuItem.getState());
+ showSequenceAnnotations.setEnabled(annotationPanelMenuItem.getState());
+ showAlignmentAnnotations.setState(true);
+ showSequenceAnnotations.setState(false);
seqLimits.setState(viewport.getShowJVSuffix());
}
else if (source == annotationPanelMenuItem)
{
- viewport.setShowAnnotation(annotationPanelMenuItem.getState());
- alignPanel.setAnnotationVisible(annotationPanelMenuItem.getState());
+ boolean showAnnotations = annotationPanelMenuItem.getState();
+ showAlignmentAnnotations.setEnabled(showAnnotations);
+ showSequenceAnnotations.setEnabled(showAnnotations);
+ viewport.setShowAnnotation(showAnnotations);
+ alignPanel.setAnnotationVisible(showAnnotations);
}
else if (source == sequenceFeatures)
{
/*
* If the cut affects all sequences, warn, remove highlighted columns
- */if (sg.getSize() == viewport.getAlignment().getHeight())
+ */
+ if (sg.getSize() == viewport.getAlignment().getHeight())
{
boolean isEntireAlignWidth = (((sg.getEndRes() - sg.getStartRes()) + 1) == viewport
.getAlignment().getWidth()) ? true : false;
if (isEntireAlignWidth)
{
- int confirm = JOptionPane.showConfirmDialog(this,
- MessageManager.getString("warn.delete_all"), // $NON-NLS-1$
- MessageManager.getString("label.delete_all"), // $NON-NLS-1$
- JOptionPane.OK_CANCEL_OPTION);
-
- if (confirm == JOptionPane.CANCEL_OPTION
- || confirm == JOptionPane.CLOSED_OPTION)
+ String title = MessageManager.getString("label.delete_all");
+ Panel infoPanel = new Panel();
+ infoPanel.setLayout(new FlowLayout());
+ infoPanel
+ .add(new Label(MessageManager.getString("warn.delete_all")));
+
+ final JVDialog dialog = new JVDialog(this, title, true, 400,
+ 200);
+ dialog.setMainPanel(infoPanel);
+ dialog.ok.setLabel(MessageManager.getString("action.ok"));
+ dialog.cancel.setLabel(MessageManager.getString("action.cancel"));
+ dialog.setVisible(true);
+
+ if (!dialog.accept)
{
return;
}
import java.util.Iterator;
import java.util.Vector;
-import javax.swing.JPanel;
+//import javax.swing.JPanel;
//import net.miginfocom.swing.MigLayout;
actionPanel.add(ok);
actionPanel.add(cancel);
- JPanel staticPanel = new JPanel();
+ Panel staticPanel = new Panel();
staticPanel.setLayout(new BorderLayout());
staticPanel.setBackground(Color.white);
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
public class JVDialog extends Dialog implements ActionListener
{
width, height);
}
+ public JVDialog(Frame owner, Panel mainPanel, String title,
+ boolean modal, int width, int height)
+ {
+ super(owner, title, modal);
+ this.owner = owner;
+
+ height += owner.getInsets().top + getInsets().bottom;
+
+ setBounds(owner.getBounds().x + (owner.getSize().width - width) / 2,
+ owner.getBounds().y + (owner.getSize().height - height) / 2,
+ width, height);
+ setMainPanel(mainPanel);
+ }
+
void setMainPanel(Panel panel)
{
add(panel, BorderLayout.NORTH);
buttonPanel.add(cancel);
ok.addActionListener(this);
cancel.addActionListener(this);
-
add(buttonPanel, BorderLayout.SOUTH);
+ addWindowListener(new WindowAdapter()
+ {
+ public void windowClosing(WindowEvent ev)
+ {
+ setVisible(false);
+ dispose();
+ }
+ });
+
pack();
}
}
setVisible(false);
+ dispose();
}
}
URL localref)
{
String resolvedPath = "";
+ if (targetPath.startsWith("/"))
+ {
+ String codebase = localref.toString();
+ String localfile = localref.getFile();
+ resolvedPath = codebase.substring(0,
+ codebase.length() - localfile.length())
+ + targetPath;
+ return resolvedPath;
+ }
/*
* get URL path and strip off any trailing file e.g.
annotationScroller.setPreferredSize(new Dimension(annotationScroller
.getWidth(), annotationHeight));
+ Dimension e = idPanel.getSize();
+ alabels.setSize(new Dimension(e.width, annotationHeight));
+
annotationSpaceFillerHolder.setPreferredSize(new Dimension(
annotationSpaceFillerHolder.getWidth(), annotationHeight));
annotationScroller.validate();
// pin down annotation sort order for test
Cache.applicationProperties.setProperty(Preferences.SORT_ANNOTATIONS,
SequenceAnnotationOrder.NONE.name());
- final String True = Boolean.TRUE.toString();
+ final String TRUE = Boolean.TRUE.toString();
Cache.applicationProperties.setProperty(
- Preferences.SHOW_AUTOCALC_ABOVE, True);
- Cache.applicationProperties.setProperty("SHOW_QUALITY", True);
- Cache.applicationProperties.setProperty("SHOW_CONSERVATION", True);
- Cache.applicationProperties.setProperty("SHOW_IDENTITY", True);
+ Preferences.SHOW_AUTOCALC_ABOVE, TRUE);
+ Cache.applicationProperties.setProperty("SHOW_QUALITY", TRUE);
+ Cache.applicationProperties.setProperty("SHOW_CONSERVATION", TRUE);
+ Cache.applicationProperties.setProperty("SHOW_IDENTITY", TRUE);
AlignmentI al = new jalview.io.FormatAdapter().readFile(TEST_DATA,
AppletFormatAdapter.PASTE, "FASTA");
assertTrue(i + "'th sequence not visible", anns[i].visible);
}
+ /*
+ * check options to hide JMol and IUPRED annotations for all sequences
+ */
final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
setSelected(hideCheckbox, true);
assertTrue(anns[0].visible); // Conservation
assertTrue(anns[1].visible); // Quality
assertTrue(anns[2].visible); // Consensus
- assertTrue(anns[3].visible); // Beauty (not seq-related)
- assertFalse(anns[4].visible); // IUPRED
+ assertFalse(anns[3].visible); // IUPRED
+ assertTrue(anns[4].visible); // Beauty (not seq-related)
assertFalse(anns[5].visible); // JMol
assertFalse(anns[6].visible); // IUPRED
assertFalse(anns[7].visible); // JMol
* available, plain) fonts and point sizes that would be rejected by Jalview's
* FontChooser as having an I-width of less than 1.0.
*/
- @Test(groups = { "Functional" })
+ @Test(groups = { "Functional" }, enabled = false)
public void dumpInvalidFonts()
{
String[] fonts = java.awt.GraphicsEnvironment
var logger = project.getBuildListeners( ).firstElement( );
logger.setMessageOutputLevel( 1 );
</script>
+ <echo message="Missing message labels compared to Messages.properties"/>
<foreach target="compareProperties" param="file2">
<path>
<fileset dir="${basedir}/resources/lang">
<propertyselector property="file1.list" delimiter="," match="prefixfile1\.(.+)" select="\1"/>
<propertyselector property="file2.list" delimiter="," match="prefixfile2\.(.+)" select="\1"/>
+ <echo message=" "/>
+ <echo message="*** ${file2}:" />
<for list="${file1.list}" param="file1.property">
<sequential>
<if>
<matches pattern=",@{file1.property}," string=",${file2.list}," />
</not>
<then>
- <if>
- <not>
- <isset property="some_missing"/>
- </not>
- <then>
- <echo message=" "/>
- <echo>**** Missing in ${file2}: ****</echo>
- </then>
- </if>
<property name="some_missing" value="true"/>
<antcall target="reportMissingProperty">
<param name="textLabel" value="@{file1.property}"/>
</if>
</sequential>
</for>
+ <if>
+ <not>
+ <isset property="some_missing"/>
+ </not>
+ <then>
+ <echo>No labels missing :-)</echo>
+ </then>
+ </if>
</target>
<target name="reportMissingProperty" description="double dereference 'prefixedPropertyName' and report missing language property">