Formatters.java
/*
* *********************************************************************************************************************
*
* blueMarine II: Semantic Media Centre
* http://tidalwave.it/projects/bluemarine2
*
* Copyright (C) 2015 - 2021 by Tidalwave s.a.s. (http://tidalwave.it)
*
* *********************************************************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* *********************************************************************************************************************
*
* git clone https://bitbucket.org/tidalwave/bluemarine2-src
* git clone https://github.com/tidalwave-it/bluemarine2-src
*
* *********************************************************************************************************************
*/
package it.tidalwave.bluemarine2.util;
import java.io.StringReader;
import java.io.StringWriter;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Base64;
import javax.annotation.Nonnull;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
/***********************************************************************************************************************
*
* @author Fabrizio Giudici
*
**********************************************************************************************************************/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class Formatters
{
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
@Nonnull
public static String xmlPrettyPrinted (@Nonnull final String xml)
{
try
{
final TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 4);
final Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
final StringWriter out = new StringWriter();
transformer.transform(new StreamSource(new StringReader(xml)), new StreamResult(out));
return out.toString();
}
catch (TransformerException e)
{
throw new RuntimeException(e);
}
}
/*******************************************************************************************************************
*
*
******************************************************************************************************************/
@Nonnull
public static String format (@Nonnull final Duration duration)
{
final long s = duration.get(ChronoUnit.SECONDS);
final long hours = s / 3600;
final long minutes = (s / 60) % 60;
final long seconds = s % 60;
return (hours == 0) ? String.format("%02d:%02d", minutes, seconds)
: String.format("%02d:%02d:%02d", hours, minutes, seconds);
}
/*******************************************************************************************************************
*
*
*
******************************************************************************************************************/
@Nonnull
public static String toHexString (@Nonnull final byte[] bytes)
{
final StringBuilder builder = new StringBuilder();
for (final byte b : bytes)
{
final int value = b & 0xff;
builder.append(Integer.toHexString(value >>> 4)).append(Integer.toHexString(value & 0x0f));
}
return builder.toString();
}
/*******************************************************************************************************************
*
*
*
******************************************************************************************************************/
@Nonnull
public static String toBase64String (@Nonnull final byte[] bytes)
{
return Base64.getUrlEncoder().encodeToString(bytes);
}
}