bool UseCaseData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case replaceExceptionCmd: if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { set_extension_points(args); com->write_ack(TRUE); } return TRUE; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool ClassInstanceData::change_rel(ToolCom * com, const char * args, bool isadd) { com->get_unsigned(args); // 2 BrowserRelation * r = (BrowserRelation *) com->get_id(args); BrowserClassInstance * other = (BrowserClassInstance *) com->get_id(args); if (r->deletedp() || other->deletedp()) { com->write_ack(FALSE); return FALSE; } RelationData * rd = (RelationData *) r->get_data(); Q3ValueList<SlotRel>::Iterator it; for (it = relations.begin(); it != relations.end(); ++it) { const SlotRel & slot_rel = *it; if ((slot_rel.value == other) && (r == ((slot_rel.is_a) ? rd->get_start() : rd->get_end()))) break; } if (isadd) { if (it == relations.end()) { // not yet present QList<BrowserRelation *> l; cl->get_rels(((ClassInstanceData *)other->get_data())->cl, l); if ((! l.contains(r)) || (!other->is_writable() && !root_permission())) { // illegal com->write_ack(FALSE); return FALSE; } // add it if (rd->is_a(r)) add(other, rd); else ((ClassInstanceData *)other->get_data()) ->add((BrowserClassInstance *) browser_node, rd); } } else if (it != relations.end()) { // remove it if (!other->is_writable() && !root_permission()) { // illegal com->write_ack(FALSE); return FALSE; } replace(other, rd, 0, (*it).is_a, 0); } return TRUE; }
bool ParameterData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { BooL ack; if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) ack = FALSE; else { switch ((unsigned char) args[-1]) { case setDefaultValueCmd: default_value = args; ack = TRUE; break; default: if (! PinParamData::tool_cmd(com, args, ack)) return BasicData::tool_cmd(com, args, bn, comment); } } } else if (! PinParamData::tool_cmd(com, args, ack)) return BasicData::tool_cmd(com, args, bn, comment); if (ack) { // ok case bn->package_modified(); modified(); } com->write_ack(ack); return TRUE; }
bool TransitionData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setUmlTriggerCmd: uml.trigger = args; break; case setUmlGuardCmd: uml.guard = args; break; case setUmlActivityCmd: uml.expr = args; break; case setCppTriggerCmd: cpp.trigger = args; break; case setCppGuardCmd: cpp.guard = args; break; case setCppActivityCmd: cpp.expr = args; break; case setJavaTriggerCmd: java.trigger = args; break; case setJavaGuardCmd: java.guard = args; break; case setJavaActivityCmd: java.expr = args; break; case setIsCppExternalCmd: if (*args != 0) is_internal = FALSE; else if (get_start_node() != end) { com->write_ack(FALSE); return TRUE; } else is_internal = TRUE; break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->package_modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool PackageData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setCppSrcDirCmd: cpp_src_dir = args; break; case setCppHDirCmd: cpp_h_dir = args; break; case setCppNamespaceCmd: cpp_namespace = args; break; case setJavaDirCmd: java_dir = args; break; case setJavaPackageCmd: java_package = args; break; case setPhpDirCmd: php_dir = args; break; case setPhpNamespaceCmd: php_namespace = args; break; case setPythonDirCmd: python_dir = args; break; case setPythonPackageCmd: python_package = args; break; case setIdlDirCmd: idl_dir = args; break; case setIdlModuleCmd: idl_module = args; break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->package_modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool BasicData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { switch ((unsigned char) args[-1]) { case setStereotypeCmd: if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { set_stereotype(args); browser_node->package_modified(); modified(); com->write_ack(TRUE); } break; case getDefCmd: send_uml_def(com, bn, comment); send_cpp_def(com); send_java_def(com); if (com->api_format() >= 34) { send_php_def(com); if (com->api_format() >= 39) send_python_def(com); } send_idl_def(com); break; case getUmlDefCmd: send_uml_def(com, bn, comment); break; case getCppDefCmd: send_uml_def(com, bn, comment); send_cpp_def(com); break; case getJavaDefCmd: send_uml_def(com, bn, comment); send_java_def(com); break; case getPhpDefCmd: send_uml_def(com, bn, comment); send_php_def(com); break; case getPythonDefCmd: send_uml_def(com, bn, comment); send_python_def(com); break; case getIdlDefCmd: send_uml_def(com, bn, comment); send_idl_def(com); break; default: return FALSE; } return TRUE; }
bool ExtraMemberData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setCppDeclCmd: cpp_decl = args; break; case setCppDefCmd: cpp_def = args; break; case setIsCppInlineCmd: cpp_inline = (*args != 0); break; case setJavaDeclCmd: java_decl = args; break; case setPhpDeclCmd: php_decl = args; break; case setPythonDeclCmd: python_decl = args; break; case setIdlDeclCmd: idl_decl = args; break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->modified(); bn->package_modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool PinData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { BooL ack; if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) ack = FALSE; else if (! PinParamData::tool_cmd(com, args, ack)) return BasicData::tool_cmd(com, args, bn, comment); } else if (! PinParamData::tool_cmd(com, args, ack)) return BasicData::tool_cmd(com, args, bn, comment); if (ack) { // ok case bn->package_modified(); modified(); } com->write_ack(ack); return TRUE; }
bool PseudoStateData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setDerivedCmd: { BrowserPseudoState * st = (BrowserPseudoState *) com->get_id(args); if (st == reference) { com->write_ack(TRUE); return TRUE; } if ((st != 0) && !((BrowserPseudoState *) browser_node)->can_reference(st)) { com->write_ack(FALSE); return TRUE; } set_reference(st); } break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool StateActionData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setDefCmd: uml = args; break; case setCppDeclCmd: cpp = args; break; case setJavaDeclCmd: java = args; break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->package_modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool ActivityPartitionData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setMultiplicityCmd: is_dimension = (*args != 0); break; case setIsCppExternalCmd: is_external = (*args != 0); break; case setDerivedCmd: represents = (BrowserNode *) com->get_id(args); break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->package_modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool ClassInstanceData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setTypeCmd: set_class((BrowserClass *) com->get_id(args)); break; case setAttributeCmd: { BrowserAttribute * at = (BrowserAttribute *) com->get_id(args); bool find = FALSE; Q3ValueList<SlotAttr>::Iterator it_attr; for (it_attr = attributes.begin(); it_attr != attributes.end(); ++it_attr) { SlotAttr & slot_attr = *it_attr; if (slot_attr.att == at) { find = TRUE; if (*args == 0) // remove it attributes.remove(it_attr); else // replace it slot_attr.value = args; break; } } if (! find) { // add it Q3PtrList<BrowserClass> l; cl->get_all_parents(l); l.append(cl); if (at->deletedp() || (l.findRef((BrowserClass *) at->parent()) == -1)) { // illegal com->write_ack(FALSE); return TRUE; } attributes.append(SlotAttr(at, args)); } } break; case addRelationCmd: if (! change_rel(com, args, TRUE)) return TRUE; break; case removeRelationCmd: if (! change_rel(com, args, FALSE)) return TRUE; break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->modified(); modified(); com->write_ack(TRUE); } } else { switch ((unsigned char) args[-1]) { case attributesCmd: if (args[0] == 0) { com->write_unsigned(attributes.count()); Q3ValueList<SlotAttr>::Iterator it; for (it = attributes.begin(); it != attributes.end(); ++it) { const SlotAttr & slot = *it; slot.att->write_id(com); com->write_string(slot.value); } } else { // get all available attributes BrowserNodeList l; BrowserNode * bn; cl->get_attrs(l); com->write_unsigned(l.count()); for (bn = l.first(); bn != 0; bn = l.next()) bn->write_id(com); } break; case relationsCmd: { BrowserClassInstance * other = (BrowserClassInstance *) com->get_id(args); if (other == 0) { com->write_unsigned(relations.count()); Q3ValueList<SlotRel>::Iterator it; for (it = relations.begin(); it != relations.end(); ++it) { const SlotRel & slot = *it; ((slot.is_a) ? slot.rel->get_start() : slot.rel->get_end()) ->write_id(com); slot.value->write_id(com); } } else { // get all available relations Q3PtrList<BrowserRelation> l; BrowserRelation * r; cl->get_rels(((ClassInstanceData *)other->get_data())->cl, l); com->write_unsigned(l.count()); for (r = l.first(); r != 0; r = l.next()) r->write_id(com); } } break; default: return BasicData::tool_cmd(com, args, bn, comment); } } return TRUE; }
bool RelationData::tool_cmd(ToolCom * com, BrowserRelation * rel, const char * args) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!rel->is_writable() && !root_permission()) com->write_ack(FALSE); else { RoleData & r = (rel == start) ? a : b; switch ((unsigned char) args[-1]) { case setDescriptionCmd: r.comment = args; break; case setStereotypeCmd: set_stereotype(args); modified(); com->write_ack(TRUE); // send the other side to update it if (rel == start) { if (end != 0) end->write_id(com); else com->write_id(0); } else start->write_id(com); return TRUE; case setRelationAssocClassCmd: { AType t; com->get_type(t, args); set_association(t); modified(); com->write_ack(TRUE); // send the other side to update it if (rel == start) { if (end != 0) end->write_id(com); else com->write_id(0); } else start->write_id(com); } return TRUE; case setNameCmd: name = args; break; case setDefaultValueCmd: r.init_value = args; break; case setIsClassMemberCmd: r.isa_class_relation = (*args != 0); break; case setIsVolatileCmd: r.isa_volatile_relation = (*args != 0); break; case setVisibilityCmd: { UmlVisibility v; if (! com->get_visibility(v, args)) { com->write_ack(FALSE); return TRUE; } r.uml_visibility = v; } break; case setConstraintCmd: r.constraint = args; break; case setCppDeclCmd: r.cpp_decl = args; break; case setJavaDeclCmd: r.java_decl = args; break; case setJavaAnnotationCmd: { WrapperStr s = args; s = s.stripWhiteSpace(); if (! s.isEmpty()) s += '\n'; r.java_annotation = s; } break; case setPhpDeclCmd: r.php_decl = args; break; case setPythonDeclCmd: r.python_decl = args; break; case setIdlDeclCmd: r.idl_decl = args; break; case setCppVisibilityCmd: { UmlVisibility v; if (! com->get_visibility(v, args)) { com->write_ack(FALSE); return TRUE; } r.cpp_visibility = v; } break; case setIsReadOnlyCmd: r.isa_const_relation = (*args != 0); break; case setIsCppMutableCmd: r.cpp_mutable = (*args != 0); break; case setRoleNameCmd: if ((rel == start) ? wrong_role_a_name(args) : wrong_role_b_name(args)) { com->write_ack(FALSE); return TRUE; } r.role = args; break; case setMultiplicityCmd: r.multiplicity = args; break; case setCppVirtualInheritanceCmd: r.cpp_virtual_inheritance = (*args != 0); break; case setIsIdlTruncatableCmd: r.idl_truncatable_inheritance = (*args != 0);; break; case setIsJavaTransientCmd: r.java_transient = (*args != 0); break; case setIdlCaseCmd: { BrowserAttribute * at = (BrowserAttribute *) com->get_id(args); set_idlcase(r, at, args); } break; case setDerivedCmd: switch (*args) { case 0: r.is_derived = r.is_derivedunion = FALSE; break; case 1: r.is_derived = TRUE; r.is_derivedunion = FALSE; break; case 3: r.is_derived = r.is_derivedunion = TRUE; break; default: // derived union but non derived com->write_ack(FALSE); return TRUE; } break; case setOrderingCmd: r.is_ordered = (*args != 0); break; case setUniqueCmd: r.is_unique = (*args != 0); break; case setTypeCmd: // only inside associations { UmlCode c; if (!com->get_relation_kind(c, args)) { com->write_ack(FALSE); return TRUE; } else { type = c; if (end) end->package_modified(); if (check_end_visibility()) end->modified(); start->modified(); start->package_modified(); modified(); } } break; default: return FALSE; } // ok case if (rel == start) { start->modified(); start->package_modified(); } else { end->modified(); end->package_modified(); } modified(); com->write_ack(TRUE); } } else { switch ((unsigned char) args[-1]) { case getDefCmd: send_uml_def(com, rel); send_cpp_def(com, rel); send_java_def(com, rel); if (com->api_format() >= 34) { send_php_def(com, rel); if (com->api_format() >= 39) send_python_def(com, rel); } send_idl_def(com, rel); break; case getUmlDefCmd: send_uml_def(com, rel); break; case getCppDefCmd: send_uml_def(com, rel); send_cpp_def(com, rel); break; case getJavaDefCmd: send_uml_def(com, rel); send_java_def(com, rel); break; case getPhpDefCmd: send_uml_def(com, rel); send_php_def(com, rel); break; case getPythonDefCmd: send_uml_def(com, rel); send_python_def(com, rel); break; case getIdlDefCmd: send_uml_def(com, rel); send_idl_def(com, rel); break; case sideCmd: if (*args) start->write_id(com); else if (end != 0) end->write_id(com); else com->write_id(0); break; default: return FALSE; } } return TRUE; }
bool ClassData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setIsAbstractCmd: if ((*args == 0) && strcmp(browser_node->get_stereotype(), "enum") && ((BrowserClass *) browser_node)->have_abstract_operation()) { com->write_ack(FALSE); return TRUE; } else is_abstract = (*args != 0); break; case setActiveCmd: is_active = (*args != 0); break; case setVisibilityCmd: { UmlVisibility v; if (! com->get_visibility(v, args)) { com->write_ack(FALSE); return TRUE; } else uml_visibility = v; } break; case setBaseTypeCmd: if (stereotype != "typedef") { com->write_ack(FALSE); return TRUE; } else { AType t; com->get_type(t, args); set_base_type(t); } break; case setConstraintCmd: constraint = args; break; case setIsCppExternalCmd: cpp_external = (*args != 0); break; case setCppVisibilityCmd: { UmlVisibility v; if (! com->get_extended_visibility(v, args)) { com->write_ack(FALSE); return TRUE; } else cpp_visibility = v; } break; case setCppDeclCmd: cpp_decl = args; break; case setIsJavaExternalCmd: java_external = (*args != 0); break; case setJavaDeclCmd: java_decl = args; break; case setJavaAnnotationCmd: { QCString s = args; s = s.stripWhiteSpace(); if (! s.isEmpty()) s += '\n'; java_annotation = s; } break; case setIsJavaPublicCmd: { UmlVisibility v = (*args != 0) ? UmlPublic : UmlPackageVisibility; if ((cpp_visibility == UmlDefaultVisibility) && (uml_visibility != UmlPublic) && (uml_visibility != UmlPackageVisibility)) cpp_visibility = uml_visibility; uml_visibility = v; } break; case setIsJavaFinalCmd: java_final = (*args != 0); break; case setIsPhpExternalCmd: php_external = (*args != 0); break; case setPhpDeclCmd: php_decl = args; break; case setIsPhpFinalCmd: php_final = (*args != 0); break; case setIsPythonExternalCmd: python_external = (*args != 0); break; case setPythonDeclCmd: python_decl = args; break; case setIsPython2_2Cmd: python_2_2 = (*args != 0); break; case setIdlDeclCmd: idl_decl = args; break; case setSwitchTypeCmd: if (GenerationSettings::idl_class_stereotype(stereotype) != "union") { com->write_ack(FALSE); return TRUE; } else { AType t; com->get_type(t, args); set_switch_type(t); } break; case setIsIdlExternalCmd: idl_external = (*args != 0); break; case setIsIdlLocalCmd: idl_local = (*args != 0); break; case setIsIdlCustomCmd: idl_custom = (*args != 0); break; case setIsClassMemberCmd: case setIsVolatileCmd: com->write_ack(FALSE); return TRUE; case removeFormalCmd: { unsigned rank = com->get_unsigned(args); if (rank < nformals) { if (nformals == 1) { delete [] formals; formals = 0; } else while (++rank != nformals) formals[rank - 1] = formals[rank]; nformals -= 1; DontUpdateActuals = FALSE; } else { com->write_ack(FALSE); return TRUE; } } break; case addFormalCmd: { unsigned rank = com->get_unsigned(args); if (rank <= nformals) { FormalParamData * new_formals = new FormalParamData[++nformals]; unsigned index; for (index = 0; index != rank; index += 1) new_formals[index] = formals[index]; new_formals[index].read(com, args); while (++index != nformals) new_formals[index] = formals[index - 1]; delete [] formals; formals = new_formals; DontUpdateActuals = FALSE; } else { FormalParamData::skip(com, args); com->write_ack(FALSE); return TRUE; } } break; case replaceFormalCmd: { unsigned rank = com->get_unsigned(args); if (rank < nformals) { formals[rank].read(com, args); DontUpdateActuals = FALSE; } else { FormalParamData::skip(com, args); com->write_ack(FALSE); return TRUE; } } break; case replaceActualCmd: { unsigned rank = com->get_unsigned(args); if (rank < actuals.count()) { AType t; com->get_type(t, args); actuals.at(rank)->set_value(t); } else { com->write_ack(FALSE); return TRUE; } } break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->modified(); // call modified bn->package_modified(); com->write_ack(TRUE); } } else { // get only ! switch ((unsigned char) args[-1]) { case formalsCmd: { com->write_unsigned((unsigned) nformals); for (int index = 0; index != nformals; index += 1) formals[index].send_uml_def(com); } break; case actualsCmd: { com->write_unsigned((unsigned) actuals.count()); for (ActualParamData * a = actuals.first(); a != 0; a = actuals.next()) a->send_uml_def(com); } break; default: return BasicData::tool_cmd(com, args, bn, comment); } } return TRUE; }
bool ActivityData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setUmlEntryBehaviorCmd: uml_condition.first = args; break; case setUmlExitBehaviorCmd: uml_condition.second = args; break; case setCppEntryBehaviorCmd: cpp_condition.first = args; break; case setCppExitBehaviorCmd: cpp_condition.second = args; break; case setJavaEntryBehaviorCmd: java_condition.first = args; break; case setJavaExitBehaviorCmd: java_condition.second = args; break; case setReadOnlyCmd: read_only = (*args != 0); break; case setSingleExecutionCmd: single_execution = (*args != 0); break; case setDefCmd: set_specification((BrowserOperation *) com->get_id(args)); break; case setActiveCmd: is_active = (*args != 0); break; case setConstraintCmd: constraint = args; break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->package_modified(); modified(); com->write_ack(TRUE); } } else return BasicData::tool_cmd(com, args, bn, comment); return TRUE; }
bool StateData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { bool ok = TRUE; if (!bn->is_writable() && !root_permission()) ok = FALSE; else { switch ((unsigned char) args[-1]) { case setUmlEntryBehaviorCmd: if (reference != 0) ok = FALSE; else uml.on_entry = args; break; case setUmlExitBehaviorCmd: if (reference != 0) ok = FALSE; else uml.on_exit = args; break; case setUmlActivityCmd: if (reference != 0) ok = FALSE; else uml.do_activity = args; break; case setCppEntryBehaviorCmd: if (reference != 0) ok = FALSE; else cpp.on_entry = args; break; case setCppExitBehaviorCmd: if (reference != 0) ok = FALSE; else cpp.on_exit = args; break; case setCppActivityCmd: if (reference != 0) ok = FALSE; else cpp.do_activity = args; break; case setJavaEntryBehaviorCmd: if (reference != 0) ok = FALSE; else java.on_entry = args; break; case setJavaExitBehaviorCmd: if (reference != 0) ok = FALSE; else java.on_exit = args; break; case setJavaActivityCmd: if (reference != 0) ok = FALSE; else java.do_activity = args; break; case setDefCmd: if (reference != 0) ok = FALSE; else set_specification((BrowserOperation *) com->get_id(args)); break; case setActiveCmd: if (reference != 0) ok = FALSE; else is_active = (*args != 0); break; case setDerivedCmd: { BrowserState * st = (BrowserState *) com->get_id(args); if (st == reference) { com->write_ack(TRUE); return TRUE; } if ((st != 0) && (!((BrowserState *) bn)->can_reference() || !((BrowserState *) browser_node)->can_reference(st))) ok = FALSE; else set_reference(st); } break; default: return BasicData::tool_cmd(com, args, bn, comment); } } if (ok) { bn->package_modified(); modified(); } com->write_ack(ok); return TRUE; } else return BasicData::tool_cmd(com, args, bn, comment); }
bool AttributeData::tool_cmd(ToolCom * com, const char * args, BrowserNode * bn, const QString & comment) { if (((unsigned char) args[-1]) >= firstSetCmd) { if (!bn->is_writable() && !root_permission()) com->write_ack(FALSE); else { switch ((unsigned char) args[-1]) { case setIsClassMemberCmd: isa_class_attribute = (*args != 0); break; case setIsVolatileCmd: isa_volatile_attribute = (*args != 0); break; case setVisibilityCmd: { UmlVisibility v; if (! com->get_visibility(v, args)) { com->write_ack(FALSE); return TRUE; } else uml_visibility = v; } break; case setMultiplicityCmd: multiplicity = args; break; case setConstraintCmd: constraint = args; break; case setCppDeclCmd: cpp_decl = args; break; case setJavaDeclCmd: java_decl = args; break; case setJavaAnnotationCmd: { WrapperStr s = args; s = s.stripWhiteSpace(); if (! s.isEmpty()) s += '\n'; java_annotation = s; } break; case setPhpDeclCmd: php_decl = args; break; case setPythonDeclCmd: python_decl = args; break; case setIdlDeclCmd: idl_decl = args; break; case setCppVisibilityCmd: { UmlVisibility v; if (! com->get_extended_visibility(v, args)) { com->write_ack(FALSE); return TRUE; } else cpp_visibility = v; } break; case setIsReadOnlyCmd: isa_const_attribute = (*args != 0); break; case setDefaultValueCmd: init_value = args; break; case setTypeCmd: { AType t; com->get_type(t, args); set_type(t); } break; case setIsCppMutableCmd: cpp_mutable = (*args != 0); break; case setIsJavaTransientCmd: java_transient = (*args != 0); break; case setIdlCaseCmd: { BrowserAttribute * at = (BrowserAttribute *) com->get_id(args); set_idlcase(at, args); } break; case setDerivedCmd: switch (*args) { case 0: is_derived = is_derivedunion = FALSE; break; case 1: is_derived = TRUE; is_derivedunion = FALSE; break; case 3: is_derived = is_derivedunion = TRUE; break; default: // derived union but non derived com->write_ack(FALSE); return TRUE; } break; case setOrderingCmd: is_ordered = (*args != 0); break; case setUniqueCmd: is_unique = (*args != 0); break; default: return BasicData::tool_cmd(com, args, bn, comment); } // ok case bn->modified(); bn->package_modified(); modified(); com->write_ack(TRUE); } return TRUE; } else return BasicData::tool_cmd(com, args, bn, comment); }
bool BrowserNode::delete_internal(QString & warning) { if (deletedp()) return TRUE; if (!is_writable() && !root_permission() && !is_from_lib()) { warning += "\n " + TR("%1 is read-only", full_name()); return FALSE; } static Q3PtrList<BrowserNode> targetof; static bool made = FALSE; bool made_here; if (!made) { made = TRUE; made_here = TRUE; referenced_by(targetof, TRUE); } else made_here = FALSE; bool ro = FALSE; if (!root_permission()) { Q3PtrListIterator<BrowserNode> it(targetof); BrowserNode * r; while ((r = it.current()) != 0) { if (!r->is_writable() && !r->is_from_lib()) { ro = TRUE; warning += "\n "; switch (r->get_type()) { case UmlComponent: warning += TR("%1 referenced by the read-only component %2", full_name(), r->full_name()); break; case UmlArtifact: warning += TR("%1 referenced by the read-only artifact %2", full_name(), r->full_name()); break; default: warning += TR("%1 is the target of the read-only relation %2", full_name(), r->full_name()); break; } } ++it; } } if (made_here) { made = FALSE; targetof.clear(); } if (ro) return FALSE; // sub elts Q3ListViewItem * child; bool ok = TRUE; for (child = firstChild(); child != 0; child = child->nextSibling()) ok &= ((BrowserNode *) child)->delete_internal(warning); if (ok) { is_deleted = TRUE; if (is_marked) { marked_list.removeRef(this); is_marked = FALSE; } get_data()->delete_it(); repaint(); package_modified(); } return ok; }
bool BrowserNode::tool_cmd(ToolCom * com, const char * args) { switch ((unsigned char) args[-1]) { case applyCmd: { QLOG_FATAL() << Q_FUNC_INFO << "If this got called then we have a logic flaw going on and BrowserNode needs to have Q_OBJECT in it to properly catch ToolCom::Run execution result"; Q_ASSERT_X(0, "applyCmd happened", "very bad"); int runResult = ToolCom::run(args, this, FALSE, FALSE); com->write_unsigned(runResult); break; } case createCmd: // invalid creation com->write_id(0); break; case parentCmd: if (this != BrowserView::get_project()) ((BrowserNode *) parent())->write_id(com); else com->write_id(0); break; case childrenCmd: { unsigned v = com->api_format(); unsigned n = 0; Q3ListViewItem * child; for (child = firstChild(); child != 0; child = child->nextSibling()) if (!((BrowserNode *) child)->deletedp() && ((BrowserNode *) child)->api_compatible(v)) n += 1; com->write_unsigned(n); for (child = firstChild(); child != 0; child = child->nextSibling()) if (!((BrowserNode *) child)->deletedp() && ((BrowserNode *) child)->api_compatible(v)) ((BrowserNode *) child)->write_id(com); } break; case getDefCmd: case getUmlDefCmd: case getCppDefCmd: case getJavaDefCmd: case getPhpDefCmd: case getPythonDefCmd: case getIdlDefCmd: get_data()->send_uml_def(com, this, comment); break; case isWritableCmd: com->write_bool(!is_read_only); break; case supportFileCmd: // goes up to the package return ((BrowserNode *) parent())->tool_cmd(com, args); case isOpenCmd: com->write_bool(isOpen()); break; case referencedByCmd: { BrowserNodeList targetof; referenced_by(targetof); // remove duplicats targetof.sort_it(); BrowserNode * bn; targetof.first(); while ((bn = targetof.current()) != 0) if (bn == targetof.next()) targetof.remove(); com->write_unsigned(targetof.count()); for (bn = targetof.first(); bn != 0; bn = targetof.next()) bn->write_id(com); } break; case setCoupleValueCmd: if (is_read_only && !root_permission()) com->write_ack(FALSE); else { set_value(args, args + strlen(args) + 1); package_modified(); get_data()->modified(); com->write_ack(TRUE); } break; case setDescriptionCmd: if (is_read_only && !root_permission()) com->write_ack(FALSE); else { set_comment(args); package_modified(); com->write_ack(TRUE); } break; case setNameCmd: if (is_read_only && !root_permission()) com->write_ack(FALSE); else { if (name != args) { if (((BrowserNode *) parent())->wrong_child_name(args, get_type(), allow_spaces(), allow_empty())) { com->write_ack(FALSE); return TRUE; } else { set_name(args); update_stereotype(); package_modified(); get_data()->modified(); } } com->write_ack(TRUE); } break; case setOpenCmd: BrowserView::select(this); setOpen(*args); com->write_ack(TRUE); break; case setMarkedCmd: if (*args) { if (this == BrowserView::get_project()) com->write_ack(FALSE); else { if (!is_marked) toggle_mark(); com->write_ack(TRUE); } } else { if (is_marked) toggle_mark(); com->write_ack(TRUE); } break; case moveAfterCmd: if (is_read_only && !root_permission()) com->write_ack(FALSE); else { BrowserNode * p = (BrowserNode *) parent(); BrowserNode * after = (BrowserNode *) com->get_id(args); if (after == 0) { if (p == 0) com->write_ack(FALSE); else { p->takeItem(this); p->insertItem(this); com->write_ack(TRUE); p->package_modified(); } } else if ((after->parent() != p) || (after == this)) { com->write_ack(FALSE); } else { moveItem(after); com->write_ack(TRUE); p->package_modified(); } } break; case moveInCmd: // plug-out upgrade, limited checks if (is_read_only && !root_permission()) com->write_ack(FALSE); else { BrowserNode * newparent = (BrowserNode *) com->get_id(args); BrowserNode * oldparent = (BrowserNode *) parent(); if ((newparent == oldparent) || (newparent == this)) { com->write_ack(FALSE); } else { oldparent->takeItem(this); newparent->insertItem(this); com->write_ack(TRUE); oldparent->package_modified(); newparent->package_modified(); } } break; case old_deleteCmd: case deleteCmd: if (is_read_only && !root_permission()) com->write_ack(FALSE); else { delete_it(); ((BrowserNode *) parent())->get_data()->modified(); package_modified(); com->write_ack(TRUE); } break; case applyStereotypeCmd: if (is_read_only && !root_permission()) com->write_ack(FALSE); else { ProfiledStereotypes::applyStereotype(this); // call package_modified() if needed com->write_ack(TRUE); } break; default: return FALSE; } return TRUE; }