/******************************************************************************
* Copyright (c) 2016 Oracle
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Konstantin Komissarchik - initial implementation and ongoing maintenance
******************************************************************************/
package org.eclipse.sapphire.util;
/**
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/
public abstract class EqualsFactory
{
private static EqualsFactory TRUE = new TrueEqualsFactory();
private static EqualsFactory FALSE = new FalseEqualsFactory();
private EqualsFactory()
{
}
public static EqualsFactory start()
{
return TRUE;
}
public abstract EqualsFactory add( Object x, Object y );
public abstract EqualsFactory add( boolean x, boolean y );
public abstract EqualsFactory add( char x, char y );
public abstract EqualsFactory add( byte x, byte y );
public abstract EqualsFactory add( short x, short y );
public abstract EqualsFactory add( int x, int y );
public abstract EqualsFactory add( long x, long y );
public abstract EqualsFactory add( float x, float y );
public abstract EqualsFactory add( double x, double y );
public abstract boolean result();
private static final class TrueEqualsFactory extends EqualsFactory
{
@Override
public EqualsFactory add( final Object x, final Object y )
{
if( x == y )
{
return TRUE;
}
else if( x != null && y != null )
{
return ( x.equals( y ) ? TRUE : FALSE );
}
return FALSE;
}
@Override
public EqualsFactory add( final boolean x, final boolean y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final char x, final char y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final byte x, final byte y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final short x, final short y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final int x, final int y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final long x, final long y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final float x, final float y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public EqualsFactory add( final double x, final double y )
{
return ( x == y ? TRUE : FALSE );
}
@Override
public boolean result()
{
return true;
}
}
private static final class FalseEqualsFactory extends EqualsFactory
{
@Override
public EqualsFactory add( final Object x, final Object y )
{
return this;
}
@Override
public EqualsFactory add( final boolean x, final boolean y )
{
return this;
}
@Override
public EqualsFactory add( final char x, final char y )
{
return this;
}
@Override
public EqualsFactory add( final byte x, final byte y )
{
return this;
}
@Override
public EqualsFactory add( final short x, final short y )
{
return this;
}
@Override
public EqualsFactory add( final int x, final int y )
{
return this;
}
@Override
public EqualsFactory add( final long x, final long y )
{
return this;
}
@Override
public EqualsFactory add( final float x, final float y )
{
return this;
}
@Override
public EqualsFactory add( final double x, final double y )
{
return this;
}
@Override
public boolean result()
{
return false;
}
}
}