/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.association;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EObject;
import org.teiid.core.designer.ModelerCoreException;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.ModelerCore;
/**
* AbstractAssociationDescriptor
*
* @since 8.0
*/
public abstract class AbstractAssociationDescriptor implements AssociationDescriptor {
protected static final AssociationDescriptor[] EMPTY_ARRAY = new AssociationDescriptor[0];
private static final String PLUGIN_ID = ModelerCore.PLUGIN_ID;
private EObject newAssociation;
private List eObjects;
private IStatus status;
private ArrayList children;
private boolean ambiguous;
private boolean creationComplete;
// ==================================================================================
// C O N S T R U C T O R S
// ==================================================================================
protected AbstractAssociationDescriptor(final List eObjects) {
CoreArgCheck.isNotNull(eObjects);
this.eObjects = eObjects;
this.status = new Status(IStatus.OK, PLUGIN_ID, -1, "", null); //$NON-NLS-1$
this.children = null;
this.ambiguous = false;
}
//==================================================================================
// I N T E R F A C E M E T H O D S
//==================================================================================
/* (non-Javadoc)
* @See org.teiid.designer.core.association.AssociationDescriptor#getImage()
*/
@Override
public abstract Object getImage();
/* (non-Javadoc)
* @See org.teiid.designer.core.association.AssociationDescriptor#getText()
*/
@Override
public abstract String getText();
/* (non-Javadoc)
* @See org.teiid.designer.core.association#isComplete()
*/
@Override
public abstract boolean isComplete();
/* (non-Javadoc)
* @See org.teiid.designer.core.association#creationComplete()
*/
@Override
public boolean creationComplete() {
return this.creationComplete;
}
/* (non-Javadoc)
* @See org.teiid.designer.core.association#setCreationComplete()
*/
@Override
public void setCreationComplete(boolean complete) {
this.creationComplete = complete;
}
/* (non-Javadoc)
* @See org.teiid.designer.core.association#getType()
*/
@Override
public abstract String getType();
/* (non-Javadoc)
* @See org.teiid.designer.core.association.AssociationDescriptor#getChildren()
*/
@Override
public AssociationDescriptor[] getChildren() {
if (children == null || children.size() == 0) {
return EMPTY_ARRAY;
}
AssociationDescriptor[] result = new AssociationDescriptor[children.size()];
children.toArray(result);
return result;
}
/* (non-Javadoc)
* @See org.teiid.designer.core.association.AssociationDescriptor#getStatus()
*/
@Override
public IStatus getStatus() {
return this.status;
}
/* (non-Javadoc)
* @See org.teiid.designer.core.association.AssociationDescriptor#isAmbiguous()
*/
@Override
public boolean isAmbiguous() {
return this.ambiguous;
}
// ==================================================================================
// P U B L I C M E T H O D S
// ==================================================================================
/**
* Create a new association instance using information available through
* this descriptor.
* @return
*/
public abstract EObject create() throws ModelerCoreException;
/**
* Return false if the list of objects contains model entities that would
* prevent an association of this type from being created.
* @return
*/
public abstract boolean canCreate();
/**
* Return the list of model entities for this descriptor.
* @return
*/
public List getEObjects() {
return this.eObjects;
}
/**
* @param b
*/
public void setAmbiguous(boolean b) {
this.ambiguous = b;
}
// ==================================================================================
// P R O T E C T E D M E T H O D S
// ==================================================================================
public void updateStatus(final IStatus s){
if (s != null) {
if (this.status.isMultiStatus()) {
final MultiStatus multiStatus = (MultiStatus)this.status;
if(s.isMultiStatus()) {
multiStatus.addAll(s);
} else {
multiStatus.add(s);
}
} else {
this.status = s;
}
}
}
public void updateStatus(final int severity, final int code, final String msg, final Throwable e){
CoreArgCheck.isNotNull(msg);
updateStatus( new Status(severity, PLUGIN_ID, code, msg, e) );
}
public void addDescriptor(final AssociationDescriptor descriptor) {
if (children == null) {
children = new ArrayList();
}
if (!children.contains(descriptor)) {
children.add(descriptor);
}
}
/**
*
* @see org.teiid.designer.core.association.AssociationDescriptor#getNewAssociation()
* @since 4.3
*/
@Override
public EObject getNewAssociation() {
return this.newAssociation;
}
/**
* @param association The association to set.
* @since 4.3
*/
public void setAssociation(EObject association) {
this.newAssociation = association;
}
}