/** * Returns true if some modelelement may be owned by the given namespace * * @param m * @param ns * @return boolean */ public boolean isValidNamespace(MModelElement m, MNamespace ns) { if (m == null || ns == null) return false; if (ns.getModel() != m.getModel()) return false; if (m == ns) return false; if (m instanceof MNamespace && m == getFirstSharedNamespace((MNamespace) m, ns)) return false; if (ns instanceof MInterface || ns instanceof MActor || ns instanceof MUseCase) return false; else if (ns instanceof MComponent) return (m instanceof MComponent && m != ns); else if (ns instanceof MCollaboration) { if (!(m instanceof MClassifierRole || m instanceof MAssociationRole || m instanceof MGeneralization || m instanceof MConstraint)) return false; } else if (ns instanceof MPackage) { if (!(m instanceof MPackage || m instanceof MClassifier || m instanceof MAssociation || m instanceof MGeneralization || m instanceof MDependency || m instanceof MConstraint || m instanceof MCollaboration || m instanceof MStateMachine || m instanceof MStereotype)) return false; } else if (ns instanceof MClass) { if (!(m instanceof MClass || m instanceof MAssociation || m instanceof MGeneralization || m instanceof MUseCase || m instanceof MConstraint || m instanceof MDependency || m instanceof MCollaboration || m instanceof MDataType || m instanceof MInterface)) return false; } else if (ns instanceof MClassifierRole) { if (!(((MClassifierRole) ns).getAvailableContentses().contains(m) || ((MClassifierRole) ns).getAvailableFeatures().contains(m))) return false; } if (m instanceof MStructuralFeature) { if (!isValidNamespace((MStructuralFeature) m, ns)) return false; } else if (m instanceof MGeneralizableElement) { if (!isValidNamespace((MGeneralizableElement) m, ns)) return false; } else if (m instanceof MGeneralization) { if (!isValidNamespace((MGeneralization) m, ns)) return false; } if (m instanceof MAssociation) { if (!isValidNamespace((MAssociation) m, ns)) return false; } else if (m instanceof MCollaboration) { if (!isValidNamespace((MCollaboration) m, ns)) return false; } return true; }