All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hisp.dhis.rules.gs1.GS1Elements Maven / Gradle / Ivy

package org.hisp.dhis.rules.gs1;

/*
 * Copyright (c) 2004-2018, University of Oslo
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 * Neither the name of the HISP project nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;

public enum GS1Elements {
    GS1_E0_IDENTIFIER( "]E0" ), // EAN-13, UPC-A, UPC-E
    GS1_E1_IDENTIFIER( "]E1" ), // Two-digit add-on symbol
    GS1_E2_IDENTIFIER( "]E2" ), // Five-digit add-on symbol
    GS1_E3_IDENTIFIER( "]E3" ), // EAN-13, UPC-A, UPC-E with add-on symbol
    GS1_E4_IDENTIFIER( "]E4" ), // EAN-8
    GS1_I1_IDENTIFIER( "]I1" ), // ITF-14
    GS1_C1_IDENTIFIER( "]C1" ), // GS1-128
    GS1_e0_IDENTIFIER( "]e0" ), // GS1 DataBar
    GS1_e1_IDENTIFIER( "]e1" ), // GS1 Composite
    GS1_e2_IDENTIFIER( "]e2" ), // GS1 Composite
    GS1_d2_IDENTIFIER( "]d2" ), // GS1 DataMatrix
    GS1_Q3_IDENTIFIER( "]Q3" ), // GS1 QR Code
    GS1_J1_IDENTIFIER( "]J1" ), // GS1 DotCode
    GS1_d1_IDENTIFIER( "]d1" ), // Data Matrix implementing ECC 200
    GS1_Q1_IDENTIFIER( "]Q1" ), // QR Code
    GS1_GROUP_SEPARATOR( "\u001d" ),
    SSCC( "00" ),
    GTIN( "01" ),
    CONTENT( "02" ),
    LOT_NUMBER( "10" ),
    PROD_DATE( "11" ),
    DUE_DATE( "12" ),
    PACK_DATE( "13" ),
    BEST_BEFORE_DATE( "15" ),
    SELL_BY( "16" ),
    EXP_DATE( "17" ),
    VARIANT( "20" ),
    SERIAL_NUMBER( "21" ),
    CPV( "22" ),
    TPX( "235" ),
    ADDITIONAL_ID( "240" ),
    CUSTOMER_PART_NUMBER( "241" ),
    MTO_VARIANT_NUMBER( "242" ),
    PCN( "243" ),
    SECONDARY_SERIAL( "250" ),
    REF_TO_SOURCE( "251" ),
    GDTI( "253" ),
    GLN_EXTENSION_COMPONENT( "254" ),
    GCN( "255" ),
    VAR_COUNT( "30" ),
    NET_WEIGHT_KG( "310*" ),
    LENGTH_M( "311*" ),
    WIDTH_M( "312*" ),
    HEIGHT_M( "313*" ),
    AREA_M2( "314*" ),
    NET_VOLUME_L( "315*" ),
    NET_VOLUME_M3( "316*" ),
    NET_WEIGHT_LB( "320*" ),
    LENGTH_I( "321*" ),
    LENGTH_F( "322*" ),
    LENGTH_Y( "323*" ),
    WIDTH_I( "324*" ),
    WIDTH_F( "325*" ),
    WIDTH_Y( "326*" ),
    HEIGHT_I( "327*" ),
    HEIGHT_F( "328*" ),
    HEIGHT_Y( "329*" ),
    GROSS_WEIGHT_GF( "330*" ),
    LENGTH_M_LOG( "331*" ),
    WIDTH_M_LOG( "332*" ),
    HEIGHT_M_LOG( "333*" ),
    AREA_M2_LOG( "334*" ),
    VOLUME_L_LOG( "335*" ),
    VOLUME_M3_LOG( "336*" ),
    KG_PER_M2( "337*" ),
    GROSS_WHEIGHT_LB( "340*" ),
    LENGTH_I_LOG( "341*" ),
    LENGTH_F_LOG( "342*" ),
    LENGTH_Y_LOG( "343*" ),
    WIDTH_I_LOG( "344*" ),
    WIDTH_F_LOG( "345*" ),
    WIDTH_Y_LOG( "346*" ),
    HEIGHT_I_LOG( "347*" ),
    HEIGHT_F_LOG( "348*" ),
    HEIGHT_Y_LOG( "349*" ),
    AREA_I2( "350*" ),
    AREA_F2( "351*" ),
    AREA_Y2( "352*" ),
    AREA_I2_LOG( "353*" ),
    AREA_F2_LOG( "354*" ),
    AREA_Y2_LOG( "355*" ),
    NET_WEIGHT_T( "356*" ),
    NET_VOLUME_OZ( "357*" ),
    NET_VOLUME_Q( "360*" ),
    NET_VOLUME_G( "361*" ),
    VOLUME_Q_LOG( "362*" ),
    VOLUME_G_LOG( "363*" ),
    VOLUME_I3( "364*" ),
    VOLUME_F3( "365*" ),
    VOLUME_Y3( "366*" ),
    VOLUME_I3_LOG( "367*" ),
    VOLUME_F3_LOG( "368*" ),
    VOLUME_Y3_LOG( "369*" ),
    COUNT( "37" ),
    AMOUNT( "390*" ),
    AMOUNT_ISO( "391*" ),
    PRICE( "392*" ),
    PRICE_ISO( "393*" ),
    PRCNT_OFF( "394*" ),
    PRICE_UOM( "395*" ),
    ORDER_NUMBER( "400" ),
    GINC( "401" ),
    ROUTE( "403" ),
    SHIP_TO_GLOB_LOC( "410" ),
    BILL_TO_LOC( "411" ),
    PURCHASED_FROM( "412" ),
    SHIP_FOR_LOG( "413" ),
    LOC_NUMBER( "414" ),
    PAY_TO( "415" ),
    PROD_SERV_LOC( "416" ),
    PARTY( "417" ),
    SHIP_TO_POST( "420" ),
    SHIP_TO_POST_ISO( "421" ),
    ORIGIN( "422" ),
    COUNTRY_INITIAL_PROCESS( "423" ),
    COUNTRY_PROCESS( "424" ),
    COUNTRY_DISASSEMBLY( "425" ),
    COUNTRY_FULL_PROCESS( "426" ),
    ORIGIN_SUBDIVISION( "427" ),
    SHIP_TO_COMP( "4300" ),
    SHIP_TO_NAME( "4301" ),
    SHIP_TO_ADD1( "4302" ),
    SHIP_TO_ADD2( "4303" ),
    SHIP_TO_SUB( "4304" ),
    SHIP_TO_LOCALITY( "4305" ),
    SHIP_TO_REG( "4306" ),
    SHIP_TO_COUNTRY( "4307" ),
    SHIP_TO_PHONE( "4308" ),
    RTN_TO_COMP( "4310" ),
    RTN_TO_NAME( "4311" ),
    RTN_TO_ADD1( "4312" ),
    RTN_TO_ADD2( "4313" ),
    RTN_TO_SUB( "4314" ),
    RTN_TO_LOCALITY( "4315" ),
    RTN_TO_REG( "4316" ),
    RTN_TO_COUNTRY( "4317" ),
    RTN_TO_POST( "4318" ),
    RTN_TO_PHONE( "4319" ),
    SRV_DESCRIPTION( "4320" ),
    DANGEROUS_GOODS( "4321" ),
    AUTH_LEAV( "4322" ),
    SIG_REQUIRED( "4323" ),
    NBEF_DEL_DT( "4324" ),
    NAFT_DEL_DT( "4325" ),
    REL_DATE( "4326" ),
    NSN( "7001" ),
    MEAT_CUT( "7002" ),
    EXP_TIME( "7003" ),
    ACTIVE_POTENCY( "7004" ),
    CATCH_AREA( "7005" ),
    FIRST_FREEZE_DATE( "7006" ),
    HARVEST_DATE( "7007" ),
    AQUATIC_SPECIES( "7008" ),
    FISHING_GEAR_TYPE( "7009" ),
    PROD_METHID( "7010" ),
    REFURB_LOT( "7020" ),
    FUNC_STAT( "7021" ),
    REV_STAT( "7022" ),
    GIAI_ASSEMBLY( "7023" ),
    PROCESSOR_NUMBER( "703*" ),
    UIC_EXT( "7040" ),
    NHRN_PZN( "710" ),
    NHRN_CIP( "711" ),
    NHRN_CN( "712" ),
    NHRN_DRN( "713" ),
    NHRN_AIM( "714" ),
    CERT_NUMBER( "723*" ),
    PROTOCOL( "7240" ),
    DIMENSIONS( "8001" ),
    CMT_NUMBER( "8002" ),
    GRAI( "8003" ),
    GIAI( "8004" ),
    PRICE_PER_UNIT( "8005" ),
    ITIP( "8006" ),
    IBAN( "8007" ),
    PROD_TIME( "8008" ),
    OPTSEN( "8009" ),
    CPID( "8010" ),
    CPID_SERIAL( "8011" ),
    VERSION( "8012" ),
    GMN( "8013" ),
    GSRN_PROVIDER( "8017" ),
    GSRN_RECIPIENT( "8018" ),
    SRIN( "8019" ),
    REF_NUMBER( "8020" ),
    ITIP_CONTENT( "8026" ),
    COUPON_USA( "8110" ),
    POINTS( "8111" ),
    POSITIVE_OFFER_COUPON_USA( "8121" ),
    PRODUCT_URL( "8200" ),
    AGREEMENT_INTERNAL( "90" ),
    COMPANY_INTERNAL_1( "91" ),
    COMPANY_INTERNAL_2( "92" ),
    COMPANY_INTERNAL_3( "93" ),
    COMPANY_INTERNAL_4( "94" ),
    COMPANY_INTERNAL_5( "95" ),
    COMPANY_INTERNAL_6( "96" ),
    COMPANY_INTERNAL_7( "97" ),
    COMPANY_INTERNAL_8( "98" ),
    COMPANY_INTERNAL_9( "99" );

    private final String element;

    GS1Elements( String element ) {
        this.element = element;
    }

    public String getElement() {
        return element;
    }

    public static Set GS1Identifiers = new HashSet<>(
            Arrays.asList(
                GS1Elements.GS1_E0_IDENTIFIER.element,
                GS1Elements.GS1_E1_IDENTIFIER.element,
                GS1Elements.GS1_E2_IDENTIFIER.element,
                GS1Elements.GS1_E3_IDENTIFIER.element,
                GS1Elements.GS1_E4_IDENTIFIER.element,
                GS1Elements.GS1_I1_IDENTIFIER.element,
                GS1Elements.GS1_C1_IDENTIFIER.element,
                GS1Elements.GS1_e0_IDENTIFIER.element,
                GS1Elements.GS1_e1_IDENTIFIER.element,
                GS1Elements.GS1_e2_IDENTIFIER.element,
                GS1Elements.GS1_d2_IDENTIFIER.element,
                GS1Elements.GS1_Q3_IDENTIFIER.element,
                GS1Elements.GS1_J1_IDENTIFIER.element,
                GS1Elements.GS1_d1_IDENTIFIER.element,
                GS1Elements.GS1_Q1_IDENTIFIER.element
    ));

    public static GS1Elements fromKey( String key )
    {
        switch (key) {
            case "gtin":
                return GTIN;
            case "lot number":
            case "batch number":
                return LOT_NUMBER;
            case "production date":
                return PROD_DATE;
            case "best before date":
                return BEST_BEFORE_DATE;
            case "expiration date":
                return EXP_DATE;
            case "serial number":
                return SERIAL_NUMBER;
            default:
                for ( GS1Elements gs1Elements : GS1Elements.values() )
                {
                    boolean keyIsGs1Element = gs1Elements.getElement().equals( key );
                    boolean keyIsGs1Name = keyIsGs1Name(gs1Elements, key);
                    if ( keyIsGs1Element || keyIsGs1Name )
                    {
                        return gs1Elements;
                    }
                }
                throw new IllegalArgumentException( "invalid or not supported gs1 key" );
        }
    }

    private static boolean keyIsGs1Name( GS1Elements gs1Element, String key )
    {
        String gs1ElementSimplified = simplifiedGS1Key( gs1Element.name() );
        String keySimplified = simplifiedGS1Key( key );
        return gs1ElementSimplified.equals( keySimplified );
    }

    private static String simplifiedGS1Key( String value ){
        return value.toLowerCase()
                .replace( " ","" )
                .replace( "_","" )
                .replace( "-","" );
    }

    public static String getApplicationIdentifier( String gs1Group )
    {
        for ( GS1Elements gs1Elements : GS1Elements.values() ) {
            String ai = gs1Elements.getElement();
            if ( ai.endsWith( "*" ) ) {
                ai = ai.substring( 0, ai.length() - 1 );
            }
            if ( gs1Group.startsWith( ai ) && ai.endsWith( "*" )) {
                return gs1Group.substring( 0, ai.length() + 1 );
            } else if ( gs1Group.startsWith( ai )) {
                return ai;
            }
        }
        throw new IllegalArgumentException( "Could not retrieve ai from value" );
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy