001/*
002 * Copyright 2015 Aroma Tech.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package tech.aroma.banana.authentication.service.data;
018
019import tech.sirwellington.alchemy.annotations.access.Internal;
020import tech.sirwellington.alchemy.annotations.designs.patterns.StrategyPattern;
021
022import static tech.sirwellington.alchemy.annotations.designs.patterns.StrategyPattern.Role.CONCRETE_BEHAVIOR;
023import static tech.sirwellington.alchemy.annotations.designs.patterns.StrategyPattern.Role.INTERFACE;
024import static tech.sirwellington.alchemy.generator.AlchemyGenerator.one;
025import static tech.sirwellington.alchemy.generator.StringGenerators.hexadecimalString;
026
027/**
028 * This interface is responsible for creating a globally unique token.
029 *
030 * @author SirWellington
031 */
032@Internal
033@FunctionalInterface
034@StrategyPattern(role = INTERFACE)
035public interface TokenCreator
036{
037
038    String create();
039
040    @StrategyPattern(role = CONCRETE_BEHAVIOR)
041    TokenCreator UUID = () -> java.util.UUID.randomUUID().toString();
042
043    @StrategyPattern(role = CONCRETE_BEHAVIOR)
044    TokenCreator UUID_PLUS_HEX = () -> UUID.create() + one(hexadecimalString(2000));
045
046}