void RelationData::unidir_change_dest(BrowserNode * e) { // called by BrowserClass::plug_out_conversion() disconnect(end_removed_from->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); end_removed_from = e; connect(end_removed_from->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); }
SimpleRelationData * SimpleRelationData::read(char * & st) { SimpleRelationData * result = new SimpleRelationData(relation_type(read_keyword(st), TRUE)); char * k = read_keyword(st); result->BasicData::read(st, k); // updates k if (strcmp(k, "on")) wrong_keyword(k, "on"); k = read_keyword(st); // note : BrowserArtifact::read get Component def on component -> artifact if (((result->end = BrowserArtifact::read(st, k, 0)) == 0) && ((result->end = BrowserComponent::read(st, k, 0)) == 0) && ((result->end = BrowserUseCase::read(st, k, 0)) == 0) && ((result->end = BrowserPackage::read(st, k, 0, FALSE)) == 0) && ((result->end = BrowserDeploymentNode::read(st, k, 0)) == 0) && ((result->end = BrowserActivity::read(st, k, 0)) == 0) && ((result->end = BrowserActivityAction::read(st, k, 0)) == 0) && ((result->end = BrowserActivityObject::read(st, k, 0)) == 0) && ((result->end = BrowserClass::read(st, k, 0)) == 0)) wrong_keyword(k, "a ref to a class, component, usecase, package, deployment node, activity, activity action or activity object"); connect(result->end->get_data(), SIGNAL(deleted()), result, SLOT(end_deleted())); return result; }
void TransitionData::set_start_end(BrowserTransition * s, BrowserNode * e) { browser_node = s; end = e; connect(e->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); is_internal = (s->parent() == e); }
TransitionData * TransitionData::read(char * & st, char * & k) { TransitionData * result = new TransitionData; result->BasicData::read(st, k); // updates k if (strcmp(k, "on")) wrong_keyword(k, "on"); k = read_keyword(st); if (((result->end = BrowserState::read(st, k, 0)) == 0) && ((result->end = BrowserPseudoState::read(st, k, 0)) == 0) && ((result->end = BrowserStateAction::read(st, k, 0)) == 0)) wrong_keyword(k, "a ref to a state or action or pseudo state"); connect(result->end->get_data(), SIGNAL(deleted()), result, SLOT(end_deleted())); k = read_keyword(st); result->uml.read(st, k, "uml"); // update k result->cpp.read(st, k, "cpp"); // update k result->java.read(st, k, "java"); // update k return result; }
RelationData::RelationData(const BrowserRelation * model, BrowserRelation * r) : ClassMemberData((ClassMemberData *) model->get_data()), Labeled<RelationData>(all, 0), is_deleted(FALSE), is_unconsistent(FALSE) { RelationData * md = (RelationData *) model->get_data(); type = md->type; name = md->name; a = md->a; b = md->b; set_association(md->association); original_id = 0; if (md->start == model) { start = r; if (md->end_removed_from == 0) { // bi dir, self to model became self to r end = new BrowserRelation((md->get_end_class() == (BrowserClass *) model->parent()) ? (BrowserClass *) r->parent() : md->get_end_class(), this); end_removed_from = 0; } else { // uni dir end = 0; end_removed_from = (md->end_removed_from == (BrowserClass *) model->parent()) ? (BrowserClass *) r->parent() : md->end_removed_from; connect(end_removed_from->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); } } else { // bi dir, self to model became self to r end = r; start = new BrowserRelation((md->get_start_class() == (BrowserClass *) model->parent()) ? (BrowserClass *) r->parent() : md->get_start_class(), this); end_removed_from = 0; } if (get_start_class() == md->get_start_class()) // to not have two times the same role name a.role = 0; if ((end != 0) && (get_end_class() == md->get_end_class())) // to not have two times the same role name b.role = 0; }
bool RelationData::check_end_visibility() { if (!navigable(end)) { if (end_removed_from == 0) { end_removed_from = end->extract(); end = 0; connect(end_removed_from->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); } return FALSE; } if (end_removed_from != 0) { disconnect(end_removed_from->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); end = BrowserRelation::reinsert(end_removed_from, this); end_removed_from = 0; end->update_stereotype(); } return TRUE; }
BrowserRelation * RelationData::set_start_end(BrowserRelation * s, BrowserClass * e) { start = s; if (! uni_directional(type)) end = new BrowserRelation(e, this); else { end_removed_from = e; connect(e->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); } if (a.uml_visibility == UmlDefaultVisibility) { QString st = ((BrowserClass *) s->parent())->get_stereotype(); switch (type) { case UmlGeneralisation: case UmlRealize: a.uml_visibility = UmlPublic; if (GenerationSettings::cpp_get_default_defs()) a.cpp_decl = (ClassDialog::cpp_stereotype(st) != "enum") ? "${type}" : ""; if (GenerationSettings::java_get_default_defs()) a.java_decl = "${type}"; if (GenerationSettings::php_get_default_defs()) a.php_decl = "${type}"; if (GenerationSettings::python_get_default_defs()) a.python_decl = "${type}"; if (GenerationSettings::idl_get_default_defs()) a.idl_decl = (ClassDialog::idl_stereotype(st) != "enum") ? "${type}" : ""; break; case UmlDependency: if (GenerationSettings::cpp_get_default_defs()) a.cpp_decl = "#include in source"; if (GenerationSettings::php_get_default_defs()) a.php_decl = "${type}"; if (GenerationSettings::python_get_default_defs()) a.python_decl = "${type}"; break; default: a.uml_visibility = ((BrowserNode *) start->parent())->get_visibility(UmlRelations); default_decls(a, type, ((BrowserNode *) start->parent())->get_data()->get_stereotype()); } } if (end != 0) { if (b.uml_visibility == UmlDefaultVisibility) b.uml_visibility = e->get_visibility(UmlRelations); default_decls(b, type, ((BrowserNode *) end->parent())->get_data()->get_stereotype()); } else b.uml_visibility = end_removed_from->get_visibility(UmlRelations); return end; }
RelationData * RelationData::read(char *& st, char *& k, BrowserRelation *& unconsistent) { unconsistent = 0; RelationData * result; int id; if (!strcmp(k, "relation_ref")) { if ((result = all[id = read_id(st)]) == 0) result = new RelationData(UmlRelations/*!!*/, id); k = read_keyword(st); return result; } else if (!strcmp(k, "relation")) { if ((result = all[id = read_id(st)]) == 0) result = new RelationData(relation_type(read_keyword(st)), id); else if (result->type != UmlRelations) { // shared identifier result->set_unconsistent(); unconsistent = result->start; result = new RelationData(relation_type(read_keyword(st)), id); result->set_unconsistent(); } else { result->type = relation_type(read_keyword(st)); result->name = default_name(result->type); if (result->start != 0) { // Created by RelationData::read_ref() // invalidate start/end to not delete result // when start/end will be deleted result->start->invalidate(); result->end->invalidate(); } } k = read_keyword(st); if (!strcmp(k, "name")) { result->name = read_string(st); k = read_keyword(st); } result->BasicData::read(st, k); // updates k if (in_lib_import()) { result->original_id = id; if (! strcmp(k, "oid")) { // a sub lib is imported as a part of the imported lib (void) read_id(st); k = read_keyword(st); } } else if (! strcmp(k, "oid")) { result->original_id = read_id(st); k = read_keyword(st); } bool assoc = isa_association(result->type); if (strcmp(k, "a")) wrong_keyword(k, "a"); read_role(result->a, assoc, st, k, result); // updates k result->start = BrowserRelation::read_ref(st, k); read_keyword(st, "b"); if (!RelationData::uni_directional(result->type)) { read_role(result->b, assoc, st, k, result); // updates k result->end = BrowserRelation::read_ref(st, k); // 'end' may be read before 'start' : relation's type was unknown result->end->set_name(0); result->end->set_name(result->name); } else { k = read_keyword(st); if (!strcmp(k, "multiplicity")) { result->b.multiplicity = read_string(st); k = read_keyword(st); } else result->b.multiplicity = 0; if (strcmp(k, "parent")) wrong_keyword(k, "parent"); result->end_removed_from = BrowserClass::read_ref(st); result->b.uml_visibility = ((BrowserNode *) result->end_removed_from->parent())->get_visibility(UmlRelations); connect(result->end_removed_from->get_data(), SIGNAL(deleted()), result, SLOT(end_deleted())); result->end = 0; // manage old declarations switch (result->type) { case UmlRealize: case UmlGeneralisation: if (result->a.cpp_decl == "Generated") result->a.cpp_decl = "${type}"; if (result->a.java_decl == "Generated") result->a.java_decl = "${type}"; if (result->a.idl_decl == "Generated") result->a.idl_decl = "${type}"; break; case UmlDependency: if (!result->a.cpp_decl.isEmpty()) { if (result->stereotype == "friend") result->a.cpp_decl = "${type}"; else if ((result->a.cpp_decl == "Generated") || (result->a.cpp_decl == "${type}")) result->a.cpp_decl = "#include in header"; else if ((result->a.cpp_decl == "#include in source") && (read_file_format() < 56)) IncludeToHeaderIfExternal.append(result); } break; default: break; } } k = read_keyword(st); AType t; if (!strcmp(k, "association_type") || !strcmp(k, "association_explicit_type")) { t.read(st, "association_type", "association_explicit_type", k); result->set_association(t); k = read_keyword(st); } return result; } else return 0; }
void SimpleRelationData::set_start_end(BrowserSimpleRelation * s, BrowserNode * e) { browser_node = s; end = e; connect(e->get_data(), SIGNAL(deleted()), this, SLOT(end_deleted())); }