/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* ComplexAttributeRestriction.java
*
* Created on 5. Mai 2004, 09:33
*/
package Sirius.navigator.types.iterator;
import Sirius.navigator.types.treenode.*;
import Sirius.server.middleware.types.*;
import java.util.Collection;
/**
* DOCUMENT ME!
*
* @author pascal
* @version $Revision$, $Date$
*/
public class ComplexAttributeRestriction implements AttributeRestriction {
//~ Instance fields --------------------------------------------------------
private final long typeRestriction;
private final int visible;
private final Collection ids;
private final Collection names;
private final Collection classes;
//~ Constructors -----------------------------------------------------------
/**
* Restrict to any visible object attributes.
*/
public ComplexAttributeRestriction() {
this(OBJECT, TRUE, null, null, null);
}
/**
* Creates a new ComplexAttributeRestriction object.
*
* @param typeRestriction DOCUMENT ME!
* @param visible DOCUMENT ME!
*/
public ComplexAttributeRestriction(final long typeRestriction, final int visible) {
this(typeRestriction, visible, null, null, null);
}
/**
* Creates a new ComplexAttributeRestriction object.
*
* @param typeRestriction DOCUMENT ME!
* @param visible DOCUMENT ME!
* @param ids DOCUMENT ME!
* @param names DOCUMENT ME!
* @param classes DOCUMENT ME!
*/
public ComplexAttributeRestriction(final long typeRestriction,
final int visible,
final Collection ids,
final Collection names,
final Collection classes) {
this.typeRestriction = typeRestriction;
this.visible = visible;
this.ids = ids;
this.names = names;
this.classes = classes;
}
//~ Methods ----------------------------------------------------------------
/*public AttributeRestriction(long typeRestriction, int visible, int coordinate, int id, String name)
* { this.typeRestriction = typeRestriction; this.visible = visible; this.coordinate = coordinate; this.id = id;
* this.name = name;}*/
/*public Sirius.server.localserver.attribute.Attribute
* applyRestriction(Sirius.server.localserver.attribute.Attribute attribute) { if( ((this.visible == IGNORE) ||
* (this.visible == FALSE && !attribute.isVisible()) || (this.visible == TRUE && attribute.isVisible())) &&
* ((this.coordinate == IGNORE) || (this.coordinate == FALSE && !attribute.isCoordinate()) || (this.coordinate ==
* TRUE && attribute.isCoordinate())) && ((this.id == IGNORE) || this.id == attribute.getID()) && ((this.name ==
* null) || this.name.equalsIgnoreCase(attribute.getName())))
* { return attribute; } else { return null; }}*/
@Override
public Sirius.server.localserver.attribute.Attribute applyRestriction(
final Sirius.server.localserver.attribute.Attribute attribute) {
if (((this.visible == IGNORE) || ((this.visible == FALSE) && !attribute.isVisible())
|| ((this.visible == TRUE) && attribute.isVisible()))) {
if ((this.ids == null) || this.ids.contains(attribute.getID())) {
if ((names == null) || (names.size() == 0) || names.contains(attribute.getName())) {
if ((classes == null)
|| ((attribute.getValue() != null)
&& classes.contains(attribute.getValue().getClass()))) {
return attribute;
}
}
} else if ((names == null) || (names.size() == 0) || names.contains(attribute.getName())) {
// XXX
// classes.contains .. aweia!
if ((classes == null)
|| ((attribute.getValue() != null) && classes.contains(attribute.getValue().getClass()))) {
return attribute;
}
} else if ((classes == null)
|| ((attribute.getValue() != null) && classes.contains(attribute.getValue().getClass()))) {
return attribute;
}
}
return null;
}
@Override
public long getTypeRestriction() {
return this.typeRestriction;
}
}