AssociationRoleImpl.java :  » UML » MetaBoss » com » metaboss » sdlctools » models » impl » metabossmodel » enterprisemodel » systemimplementationmodel » Java Open Source

Java Open Source » UML » MetaBoss 
MetaBoss » com » metaboss » sdlctools » models » impl » metabossmodel » enterprisemodel » systemimplementationmodel » AssociationRoleImpl.java
// THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
// CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED 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 SOFTARIS PTY.LTD.
// OR OTHER METABOSS 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 SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Copyright 2000-2005  Softaris Pty.Ltd. All Rights Reserved.
package com.metaboss.sdlctools.models.impl.metabossmodel.enterprisemodel.systemimplementationmodel;

import java.util.Collection;
import java.util.List;

import javax.jmi.reflect.ConstraintViolationException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.netbeans.mdr.storagemodel.StorableObject;

import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.AggregationType;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.AggregationTypeEnum;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.Association;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.AssociationRole;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.AssociationRoleCardinality;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.AssociationRoleCardinalityEnum;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.systemimplementationmodel.Entity;

public abstract class AssociationRoleImpl extends PrimaryKeyElementImpl implements AssociationRole
{
  // Commons Logging instance.
  private static final Log sLogger = LogFactory.getLog(AssociationRoleImpl.class);

  // Required constructor
  protected AssociationRoleImpl(StorableObject storable)
  {
      super(storable);
  }

  // Verify certain constraints
  protected Collection _verify(Collection pViolations)
  {
    // First call superclass
    Collection lViolations = super._verify(pViolations);
    
    // Constraint #1 - the association role with aggregation type of composition
    // can only have 'one and only one' multiplicity
    {
      AggregationType lAssociationRoleAggregationType = getAggregationType();
      if (lAssociationRoleAggregationType != null && lAssociationRoleAggregationType.equals(AggregationTypeEnum.COMPOSITION))
      {
        if (!getCardinality().equals(AssociationRoleCardinalityEnum.ONE))
          lViolations.add(new ConstraintViolationException(this,refMetaObject(),"AssociationRole with aggregation type of 'Composition' has unsupported cardinality. Only 'exactly one' cardinality is supported."));
      }
    }
    return lViolations;
  }
  
  // Returns true if this association has plural cardinality 
  public boolean isPlural()
  {
    AssociationRoleCardinality lCardinality = getCardinality();
    return lCardinality != null && (lCardinality.equals(AssociationRoleCardinalityEnum.ZERO_TO_MANY) || lCardinality.equals(AssociationRoleCardinalityEnum.ONE_TO_MANY)); 
  }

  // Returns true if this association has singular cardinality 
  public boolean isSingular()
  {
    AssociationRoleCardinality lCardinality = getCardinality();
    return lCardinality != null && (lCardinality.equals(AssociationRoleCardinalityEnum.ZERO_OR_ONE) || lCardinality.equals(AssociationRoleCardinalityEnum.ONE)); 
  }

  // Returns true if this association has optional cardinality 
  public boolean isOptional()
  {
    AssociationRoleCardinality lCardinality = getCardinality();
    return lCardinality != null && (lCardinality.equals(AssociationRoleCardinalityEnum.ZERO_TO_MANY) || lCardinality.equals(AssociationRoleCardinalityEnum.ZERO_OR_ONE)); 
  }
  
  // Returns true if this association has mandatory cardinality 
  public boolean isMandatory()
  {
    AssociationRoleCardinality lCardinality = getCardinality();
    return lCardinality != null && (lCardinality.equals(AssociationRoleCardinalityEnum.ONE_TO_MANY) || lCardinality.equals(AssociationRoleCardinalityEnum.ONE)); 
  }

  /** Returns the role on the other side of the association */ 
  public AssociationRole getOppositeRole()
  {
    Association lAssociation = ((AssociationRole)this).getAssociation();
    if (lAssociation == null)
      return null; // Model has a problem unable to get the opposite role
    List lAssociationRoles = lAssociation.getRoles();
    if (lAssociationRoles.size() != 2)
      return null; // Model has a problem unable to get the opposite role
    int lOppositeRoleIndex = lAssociationRoles.indexOf(this) == 0 ? 1 : 0;    
    return (AssociationRole)lAssociationRoles.get(lOppositeRoleIndex);
  }
  
  /** Returns the entity, which references this role. In other words - an entity playing the opposite role in the association */ 
  public Entity getReferencingEntity()
  {
    AssociationRole lOppositeRole = getOppositeRole();
    return lOppositeRole != null ? lOppositeRole.getEntity() : null;
  }  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.