public void toPhyloXML( final Writer writer, final int level, final String indentation ) throws IOException {
        if ( isHasNodeIdentifier() ) {
            writer.write( ForesterUtil.LINE_SEPARATOR );
            writer.write( indentation );
            //  if ( !org.forester.util.ForesterUtil.isEmpty( getNodeIdentifier().getProvider() ) ) {
            //     PhylogenyDataUtil.appendElement( writer, PhyloXmlMapping.NODE_IDENTIFIER, getNodeIdentifier()
            //             .getValue(), PhyloXmlMapping.IDENTIFIER_PROVIDER_ATTR, getNodeIdentifier().getProvider() );
            // }
            // else {
            //     PhylogenyDataUtil.appendElement( writer, PhyloXmlMapping.NODE_IDENTIFIER, getNodeIdentifier()
            //             .getValue() );
            // }
        }
        if ( isHasTaxonomy() ) {
            getTaxonomy().toPhyloXML( writer, level, indentation );
        }
        if ( isHasSequence() ) {
            getSequence().toPhyloXML( writer, level, indentation );
        }
        if ( isHasEvent() ) {
            getEvent().toPhyloXML( writer, level, indentation );
        }
        if ( isHasBinaryCharacters() ) {
            getBinaryCharacters().toPhyloXML( writer, level, indentation );
        }
        if ( isHasDistribution() ) {
            getDistribution().toPhyloXML( writer, level, indentation );
        }
        if ( isHasDate() ) {
            getDate().toPhyloXML( writer, level, indentation );
        }
        if ( isHasReference() ) {
            getReference().toPhyloXML( writer, level, indentation );
        }
        if ( isHasProperties() ) {
            getProperties().toPhyloXML( writer, level, indentation.substring( 0, indentation.length() - 3 ) );
        }
    }