/******************************************************************************
* 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.java;
import java.util.Collection;
import java.util.Collections;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/
public final class JavaTypeConstraintServiceData
{
private final SortedSet<JavaTypeKind> kinds;
private final SortedSet<String> types;
private final JavaTypeConstraintBehavior behavior;
public JavaTypeConstraintServiceData( final Collection<JavaTypeKind> kinds,
final Collection<String> types,
final JavaTypeConstraintBehavior behavior )
{
final SortedSet<JavaTypeKind> kindsCopy = new TreeSet<JavaTypeKind>();
for( JavaTypeKind kind : kinds )
{
if( kind != null )
{
kindsCopy.add( kind );
}
}
this.kinds = Collections.unmodifiableSortedSet( kindsCopy );
final SortedSet<String> typesCopy = new TreeSet<String>();
for( String type : types )
{
if( type != null )
{
type = type.trim();
if( type.length() > 0 )
{
typesCopy.add( type );
}
}
}
this.types = Collections.unmodifiableSortedSet( typesCopy );
this.behavior = ( behavior == null ? JavaTypeConstraintBehavior.ALL : behavior );
}
public JavaTypeConstraintServiceData( final Collection<JavaTypeKind> kinds,
final Collection<String> types )
{
this( kinds, types, JavaTypeConstraintBehavior.ALL );
}
public SortedSet<JavaTypeKind> kinds()
{
return this.kinds;
}
public SortedSet<String> types()
{
return this.types;
}
public JavaTypeConstraintBehavior behavior()
{
return this.behavior;
}
@Override
public boolean equals( final Object obj )
{
if( obj instanceof JavaTypeConstraintServiceData )
{
final JavaTypeConstraintServiceData data = (JavaTypeConstraintServiceData) obj;
return this.kinds.equals( data.kinds ) && this.types.equals( data.types ) && ( this.behavior == data.behavior );
}
return false;
}
@Override
public int hashCode()
{
return this.kinds.hashCode() ^ this.types.hashCode() ^ this.behavior.hashCode();
}
}